下面代码中实现将一个bmp图片读取并转化成二值的二维数组,为什么有时候读取出并打印(即将二维数组表示成点阵图)出来的是
下面这种倾斜的图呢?而有的图片打印出来是正常、不倾斜的。
如果各位有好的现成的代码能否贴一下?
BOOL BmpToMatrix(LPCWCH lpDIBFilePath,PBmpMatrixInfo pOutBmpMatrixInfo)
{
LPSTR DIBBit=0;
LONG DIBsHeight=0;
LONG DIBsWidth=0;
LPSTR lpDIB=0;
BYTE bThre = 251;//阙值
LONG i; // 循环变量
LONG j;
LONG cout;
RGBTRIPLE *rgb;
CFile cf;
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
if (!cf.Open(lpDIBFilePath,CFile::modeRead))
{
return FALSE;
}
cf.SeekToBegin();
cf.Read(&bmfh,sizeof(bmfh));
cf.Read(&bmih,sizeof(bmih));
DIBsWidth = bmih.biWidth;
DIBsHeight = bmih.biHeight;
PBYTE Matrix=(PBYTE)malloc( DIBsWidth * 1 * DIBsHeight * sizeof(BYTE));
memset(Matrix,0xcc , DIBsWidth * 1 * DIBsHeight * sizeof(BYTE));
rgb = new RGBTRIPLE[bmih.biWidth*bmih.biHeight];
cf.SeekToBegin();
cf.Seek(54,CFile::begin);
ULONGLONG len=cf.GetLength();
cf.Read(rgb,bmih.biWidth*bmih.biHeight*3);
bThre = 160;
if ( 0 == Mode
{
for ( i=0; i<DIBsHeight;i++)
{
for ( j= 0; j<(DIBsWidth); (++j))
{
BYTE color = (rgb[i*bmih.biWidth+j].rgbtRed + rgb[i*bmih.biWidth+j].rgbtGreen + rgb[i*bmih.biWidth+j].rgbtBlue)/3;
*(PBYTE)(Matrix + 1*DIBsWidth*i +j) = color<bThre? 0 : 255 ;
}
}
}
cf.Close();
delete rgb;
pOutBmpMatrixInfo->lHight = DIBsHeight;
pOutBmpMatrixInfo->lWidth = DIBsWidth;
pOutBmpMatrixInfo->Matrix = Matrix;
return TRUE;
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!