我在处理raw转bmp时用了下面的函数,显示出来的bmp图像背景是绿色的,输入的是8位Raw灰度数据, 不知道为甚么,可以解答一下吗?
void RawToBmp(unsigned char *Dist[Height], int pWidth, int pHeight)
{
FILE *fp_bmp;
fopen_s(&fp_bmp, "1.bmp", "w");
BITMAPFILEHEADER bh;//位图文件头
BITMAPINFOHEADER bInfo;//位图信息头
RGBQUAD rgb;//彩色表
rgb.rgbReserved = 0; //保留,设置为0
bInfo.biSize = sizeof(BITMAPINFOHEADER);//结构体所需要的字数
bInfo.biWidth = pWidth; //宽
bInfo.biHeight = pHeight; //高
bInfo.biPlanes = 1; //说明位面数,1
bInfo.biBitCount = 8; //像素,8比特
bInfo.biCompression = BI_RGB; //无压缩
bInfo.biSizeImage = pWidth * pHeight; //图像大小,单位字节
bInfo.biXPelsPerMeter = 0; //水平分辨率
bInfo.biYPelsPerMeter = 0; //垂直分辨率
bInfo.biClrUsed = 256; //位图实际使用的彩色表中的颜色索引数
bInfo.biClrImportant = 0; //表示颜色索引数目都重要
bh.bfType = ((WORD)('M' << 8) | 'B'); //表示这是一个WORD(16位2字节),低位为'B',高位为'M'
bh.bfReserved1 = 0; //保留,必须为0
bh.bfReserved2 = 0; //保留,必须为0
bh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*bInfo.biClrUsed; //偏移量
bh.bfSize = bh.bfOffBits + bInfo.biSizeImage; //文件大小
/*******写bmp文件(文件头,信息头,彩色表,数据)******/
fwrite(&bh, sizeof(BITMAPFILEHEADER), 1, fp_bmp);//写文件头
fwrite(&bInfo, sizeof(BITMAPINFOHEADER), 1, fp_bmp);//写信息头
for (int i = 0; i < 256; i++)//写彩色表
{
rgb.rgbBlue = rgb.rgbGreen = rgb.rgbRed = i;
fwrite(&rgb, sizeof(RGBQUAD), 1, fp_bmp);
}
for (int i = pHeight - 1; i >= 0; i--)//写图像数据 (unsigned char)Dist[i]是处理好的8位灰度Raw图像数据
{
fwrite(Dist[i], 1, pWidth, fp_bmp);
}
/*for (int i = 0; i < pHeight * pWidth; i++)
{
fwrite(&Dist[i], 1, 1, fp_bmp);
}*/
fclose(fp_bmp);
printf("完成格式转换!!\n");
}