问题:我的问题出在我自己写的cBlur模块中,它不能正常工作,请熟练VC++的朋友一定帮忙改改,我相信这个问题对熟练VC的朋友来说是很简单的。谢谢
我找到一个实现图像模糊的源代码(建议粘贴到VC中分析):HRESULT __stdcall GPX_Blur (HDC PicDestDC, 
HDC PicSrcDC,
int *Response)
{
int BitCount = 0;
int Result = 0;
int Width = 0; 
int Height = 0;
BITMAPINFO info;
HBITMAP PicSrcHwnd = GetBitmapHandle (PicSrcDC, &info, &Width, &Height); if (! PicSrcHwnd)
{
*Response = (int)Result;
return (E_FAIL);
} int LineWidth = Width * 3;
if (LineWidth % 4)
LineWidth += (4 - LineWidth % 4); BitCount = LineWidth * Height;
LPBYTE Bits = new BYTE[BitCount]; Result = GetDIBits (PicSrcDC, PicSrcHwnd, 0, Height, Bits, &info, DIB_RGB_COLORS);
if (Result)
{
int i = 0, j = 0, k = 0;
for (int h = 1; h < Height - 1; h++)
for (int w = 1; w < Width - 1; w++)
{
i = h * LineWidth + 3 * w;
j = (h + 1) * LineWidth + 3 * w;
k = (h - 1) * LineWidth + 3 * w; Bits[i+2] = (Bits[i-1] + Bits[j-1] + Bits[k-1] +
 Bits[i+2] + Bits[j+2] + Bits[k+2] +
 Bits[i+5] + Bits[j+5] + Bits[k+5]) / 9;
Bits[i+1] = (Bits[i-2] + Bits[j-2] + Bits[k-2] +
 Bits[i+1] + Bits[j+1] + Bits[k+1] +
 Bits[i+4] + Bits[j+4] + Bits[k+4]) / 9;
Bits[ i ] = (Bits[i-3] + Bits[j-3] + Bits[k-3] +
 Bits[ i ] + Bits[ j ] + Bits[ k ] +
 Bits[i+3] + Bits[j+3] + Bits[k+3]) / 9;
} ::SetDIBitsToDevice (PicDestDC, 0, 0, Width, Height, 0, 0, 0, Height, Bits, &info, 0);

::DeleteObject (PicSrcHwnd);
delete [] Bits; *Response = (int)Result;
return (S_OK);
} return (E_FAIL);
}我现在已经把它制作成API函数,并从VB向这个函数传递了图像的数组(包含R、G、B分量值):void _stdcall cBlur(ColorTypes *suBits, ColorTypes *sdBits, short hWidth, short hHeight, short hLevel)
{
int x,y;
int i = 0, j = 0, k = 0; for (y=1; y<50; y++)
{
for (x=1; x<50; x++)
{
i = y * hWidth +  x;
j = (y + 1) * hWidth + x;
k = (y - 1) * hWidth + x; suBits[i+2].Rouge = int((suBits[i-1].Rouge + suBits[j-1].Rouge + suBits[k-1].Rouge +
 suBits[i+2].Rouge + suBits[j+2].Rouge + suBits[k+2].Rouge +
 suBits[i+5].Rouge + suBits[j+5].Rouge + suBits[k+5].Rouge) / 9);
suBits[i+2].Vert = int((suBits[i-1].Vert + suBits[j-1].Vert + suBits[k-1].Vert +
 suBits[i+2].Vert + suBits[j+2].Vert + suBits[k+2].Vert +
 suBits[i+5].Vert + suBits[j+5].Vert + suBits[k+5].Vert) / 9);
suBits[i+2].Bleu = int((suBits[i-1].Bleu + suBits[j-1].Bleu + suBits[k-1].Bleu +
 suBits[i+2].Bleu + suBits[j+2].Bleu + suBits[k+2].Bleu +
 suBits[i+5].Bleu + suBits[j+5].Bleu + suBits[k+5].Bleu) / 9); suBits[i+1].Rouge = int((suBits[i-2].Rouge + suBits[j-2].Rouge + suBits[k-2].Rouge +
 suBits[i+1].Rouge + suBits[j+1].Rouge + suBits[k+1].Rouge +
 suBits[i+4].Rouge + suBits[j+4].Rouge + suBits[k+4].Rouge) / 9);
suBits[i+1].Vert = int((suBits[i-2].Vert + suBits[j-2].Vert + suBits[k-2].Vert +
 suBits[i+1].Vert + suBits[j+1].Vert + suBits[k+1].Vert +
 suBits[i+4].Vert + suBits[j+4].Vert + suBits[k+4].Vert) / 9);
suBits[i+1].Bleu = int((suBits[i-2].Bleu + suBits[j-2].Bleu + suBits[k-2].Bleu +
 suBits[i+1].Bleu + suBits[j+1].Bleu + suBits[k+1].Bleu +
 suBits[i+4].Bleu + suBits[j+4].Bleu + suBits[k+4].Bleu) / 9); suBits[ i ].Rouge = int((suBits[i-3].Rouge + suBits[j-3].Rouge + suBits[k-3].Rouge +
 suBits[ i ].Rouge + suBits[ j ].Rouge + suBits[ k ].Rouge +
 suBits[i+3].Rouge + suBits[j+3].Rouge + suBits[k+3].Rouge) / 9);
suBits[ i ].Vert = int((suBits[i-3].Vert + suBits[j-3].Vert + suBits[k-3].Vert +
 suBits[ i ].Vert + suBits[ j ].Vert + suBits[ k ].Vert +
 suBits[i+3].Vert + suBits[j+3].Vert + suBits[k+3].Vert) / 9);
suBits[ i ].Bleu = int((suBits[i-3].Bleu + suBits[j-3].Bleu + suBits[k-3].Bleu +
 suBits[ i ].Bleu + suBits[ j ].Bleu + suBits[ k ].Bleu +
 suBits[i+3].Bleu + suBits[j+3].Bleu + suBits[k+3].Bleu) / 9);
}
}
}1. 这个值在VB中是以二维数组的形式存在:        For y = 1 To h
            For x = 1 To w
                With sdBits(x, y)
                    ...
                End With
            Next x
        Next y2. 当被VC++接收后,以一维数组的形式存在: for (y=0; y<hHeight; y++)
{
for (x=0; x<hWidth; x++)
{
Val=suBits[y*hWidth+x];
                        ...
                 }
         }