我想请教处理后的位图文件保存后无法打开,
是不是我其中那部分的程序出了问题.
希望高手帮我找找错误.
KillTimer(1);
DWORD ByteSize;
m_bmp.GetBitmap(&bm);
BYTE* lpBits; //定义图像数据指针
char unsigned *temp;
int bmBytePixel=bm.bmBitsPixel/8; //每行图像占的字节数
ByteSize=bm.bmHeight*bm.bmWidthBytes; //整幅图像占的字节数
lpBits=new BYTE[ByteSize];
m_bmp.GetBitmapBits(ByteSize,lpBits); //现在lpBits里面就是象素的RGB值了
//对其中的R,G,B值依次进行处理
for(int i=0;i<bm.bmHeight;i++)
{
for(int j=0;j<bm.bmWidth;j++)
{
temp=lpBits;
if((*temp>10)&&(*(temp++)>50)&&(*(temp++)<80))
{
*lpBits =255;
lpBits ++;
*lpBits = 255;
lpBits ++;
*lpBits = 255;
lpBits ++;
}
else
{
lpBits=lpBits+3;
}
}
}//现在lpBits里面的就是处理后的RGB
//把采集到的位图重新存储成文件
BITMAPFILEHEADER bfh;
CFile file;
bfh.bfType='BM';
bfh.bfSize=ByteSize;
bfh.bfReserved1=0;
bfh.bfReserved2=0;
bfh.bfOffBits=sizeof(BITMAPFILEHEADER);
if(file.Open("g:\\des.bmp" , CFile::modeCreate | CFile::modeWrite) )
{
file.Write(&bfh,sizeof(BITMAPFILEHEADER));
file.Write(lpBits , ByteSize-sizeof(BITMAPFILEHEADER));
file.Close();
}
free(lpBits);
lpBits = NULL;
是不是我其中那部分的程序出了问题.
希望高手帮我找找错误.
KillTimer(1);
DWORD ByteSize;
m_bmp.GetBitmap(&bm);
BYTE* lpBits; //定义图像数据指针
char unsigned *temp;
int bmBytePixel=bm.bmBitsPixel/8; //每行图像占的字节数
ByteSize=bm.bmHeight*bm.bmWidthBytes; //整幅图像占的字节数
lpBits=new BYTE[ByteSize];
m_bmp.GetBitmapBits(ByteSize,lpBits); //现在lpBits里面就是象素的RGB值了
//对其中的R,G,B值依次进行处理
for(int i=0;i<bm.bmHeight;i++)
{
for(int j=0;j<bm.bmWidth;j++)
{
temp=lpBits;
if((*temp>10)&&(*(temp++)>50)&&(*(temp++)<80))
{
*lpBits =255;
lpBits ++;
*lpBits = 255;
lpBits ++;
*lpBits = 255;
lpBits ++;
}
else
{
lpBits=lpBits+3;
}
}
}//现在lpBits里面的就是处理后的RGB
//把采集到的位图重新存储成文件
BITMAPFILEHEADER bfh;
CFile file;
bfh.bfType='BM';
bfh.bfSize=ByteSize;
bfh.bfReserved1=0;
bfh.bfReserved2=0;
bfh.bfOffBits=sizeof(BITMAPFILEHEADER);
if(file.Open("g:\\des.bmp" , CFile::modeCreate | CFile::modeWrite) )
{
file.Write(&bfh,sizeof(BITMAPFILEHEADER));
file.Write(lpBits , ByteSize-sizeof(BITMAPFILEHEADER));
file.Close();
}
free(lpBits);
lpBits = NULL;
BITMAPINFOHEADER
这个结构在BITMAPFILEHEADER结构写完之后,接着写入,然后就是图象的RGBQUAD(对于16位以上的位图不需要),最后才是你的图像数据lpBits。
我得到的lpBits是象素得RGB值得指针吗
再写Bitmap信息头。//漏了
如果有调色板,写调色板。//16位以上就不用了
写图像数据。