BITMAP bmSrcInfo;
bmpSrc->GetBitmap( &bmSrcInfo );
DWORD dwBmByteSize = bmSrcInfo.bmWidthBytes * bmSrcInfo.bmHeight;
LPBYTE pBmBits = (LPBYTE) GlobalAlloc(GPTR, dwBmByteSize);
bmpSrc->GetBitmapBits(dwBmByteSize, pBmBits);
int nPixBytes = bmSrcInfo.bmBitsPixel/8;
if(nPixBytes > 1)
{
int nRemainLineBytes = bmSrcInfo.bmWidthBytes - bmSrcInfo.bmWidth * nPixBytes; //每行剩余字节数
DWORD dwOffset = 0;
for(long nHeight=0; nHeight<bmSrcInfo.bmHeight; nHeight++)
{
for(long nWidth=0; nWidth<bmSrcInfo.bmWidth; nWidth++)
{
DWORD dwSum = 0;
int Min = 0x7FFF, Max = 0;
for(int np=0; np<nPixBytes; np++)
{
BYTE bCR = pBmBits[dwOffset + np];
dwSum += bCR;
if(Min > bCR) Min = bCR;
if(Max < bCR) Max = bCR;
}
BYTE Gray = 0;
if(bAvgType)
Gray = (BYTE)(dwSum / nPixBytes); //均值
else
Gray = (BYTE)((Min + Max)/2); //中值
for(int np2=0; np2<nPixBytes; np2++)
{
pBmBits[dwOffset + np2] = Gray;
}
dwOffset += nPixBytes;
}
dwOffset += nRemainLineBytes;
}
}
bmpSrc->SetBitmapBits(dwBmByteSize, pBmBits);
GlobalFree(pBmBits);
}
}