请看图片为什么会这样子,我只是想转化成灰度,天居然这样对我:(
http://www.3-sky.com/mt/ihqq/Snap1.bmp
http://www.3-sky.com/mt/ihqq/Snap2.bmp
用的是前几天一个兄弟的代码
LPBYTE lpGrayBit=(LPBYTE)lpGray;
if(IS_WIN30_DIB(lpBit))
{
lpGrayBit+=pHeader->biSize+256*sizeof(RGBQUAD);//将指针移到新建的灰度图像的数据区
lpBit+=sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);//这个移到原来图像的数据区
}
else
{
lpGrayBit+=pHeader->biSize+256*sizeof(RGBTRIPLE);
lpBit+=sizeof(BITMAPINFOHEADER)+256*sizeof(RGBTRIPLE);
}
int nCountBit=pHeader->biBitCount;
if(nCountBit>8)//if biBitCount great eight then translate
{
int nRGB=(nWide*nCountBit+31)/32*4-nWide*nCountBit/8;
int nGrey=(nWide*8+31)/32*4-nWide;
for(i=0;i<nHeight;i++)
{
for(j=0;j<nWide;j++)
*lpGrayBit++=(*lpBit++)*0.299+(*lpBit++)*0.587+(*lpBit++)*0.114;
lpGrayBit+=nGrey;
lpBit+=nRGB;
}
::GlobalUnlock((HGLOBAL)hDib);
::GlobalFree((HGLOBAL)hDib);
hDib = hGreyDIB;
::GlobalUnlock((HGLOBAL)hGreyDIB);
}//下面的代码没有用到
http://www.3-sky.com/mt/ihqq/Snap1.bmp
http://www.3-sky.com/mt/ihqq/Snap2.bmp
用的是前几天一个兄弟的代码
LPBYTE lpGrayBit=(LPBYTE)lpGray;
if(IS_WIN30_DIB(lpBit))
{
lpGrayBit+=pHeader->biSize+256*sizeof(RGBQUAD);//将指针移到新建的灰度图像的数据区
lpBit+=sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);//这个移到原来图像的数据区
}
else
{
lpGrayBit+=pHeader->biSize+256*sizeof(RGBTRIPLE);
lpBit+=sizeof(BITMAPINFOHEADER)+256*sizeof(RGBTRIPLE);
}
int nCountBit=pHeader->biBitCount;
if(nCountBit>8)//if biBitCount great eight then translate
{
int nRGB=(nWide*nCountBit+31)/32*4-nWide*nCountBit/8;
int nGrey=(nWide*8+31)/32*4-nWide;
for(i=0;i<nHeight;i++)
{
for(j=0;j<nWide;j++)
*lpGrayBit++=(*lpBit++)*0.299+(*lpBit++)*0.587+(*lpBit++)*0.114;
lpGrayBit+=nGrey;
lpBit+=nRGB;
}
::GlobalUnlock((HGLOBAL)hDib);
::GlobalFree((HGLOBAL)hDib);
hDib = hGreyDIB;
::GlobalUnlock((HGLOBAL)hGreyDIB);
}//下面的代码没有用到
if(IS_WIN30_DIB(lpBit))
lpGrayBit+=pHeader->biSize+256*sizeof(RGBQUAD);
else
lpGrayBit+=pHeader->biSize+256*sizeof(RGBTRIPLE);
int nCountBit=pHeader->biBitCount;
if(nCountBit>16)//if biBitCount great eight then translate
{
lpBit+=sizeof(BITMAPINFOHEADER);
int nRGB=(nWide*nCountBit+31)/32*4-nWide*nCountBit/8;
int nGrey=(nWide*8+31)/32*4-nWide;
for(i=0;i<nHeight;i++)
{
for(j=0;j<nWide;j++)
*lpGrayBit++=(*lpBit++)*0.299+(*lpBit++)*0.587+(*lpBit++)*0.114;
lpGrayBit+=nGrey;
lpBit+=nRGB;
}
::GlobalUnlock((HGLOBAL)hDib);
::GlobalFree((HGLOBAL)hDib);
hDib = hGreyDIB;
::GlobalUnlock((HGLOBAL)hGreyDIB);
}
图像变成了这样子
http://www.3-sky.com/mt/ihqq/Snap3.bmp
从中间分开了