bmp图在XP上显示错误?求分析
bmp图在XP上显示异常?!求分析!
如图是XP系统预览和画图软件看到的同一张BMP图(同一个文件啊!),效果竟然不一样。这是一张我自己编码生成的8位位图,虽然只用了黑白色,但是为了方便缩放,所以用的8位。
重点来了,为什么效果会不一样?画图中的效果是正常的效果(win7上显示的就都是这样),但是预览的效果竟然不是这样,画到emf中也是那个预览的效果,导致打印出来扫不出来啊!

从图上可以看出,图片数据是正常的,就是位置发生了错位。似乎预览软件是从数据段中间开始取数据了,如果是这样,那他怎么还能正常的取到前面的数据呢?这说明应该不是我的BMP头中数据偏移位置指错了吧。
不知道又没人遇到过这个问题,求分析,求帮助
]
另外附上源文件下载链接:http://download.****.net/detail/a2619308/8156629
------解决思路----------------------
也许是你没考虑一行像素数据需要四字节对齐。
------解决思路----------------------
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;
红的不对
------解决思路----------------------
// 颜色表
RGBQUAD ldColorTable[256] = {{0,0,0,0},{255,255,255,0}};
for(int i = 0; i < 256; ++i)
{
ldColorTable[i].rgbBlue = i;
ldColorTable[i].rgbGreen = i;
ldColorTable[i].rgbRed = i;
ldColorTable[i].rgbReserved = 0;
}
// 256 grey color
而
+ 2 * sizeof(RGBQUAD)
只有 2个 ?
------解决思路----------------------
69行
ldBmpInfoHeader.biSizeImage = 0;
改为
ldBmpInfoHeader.biSizeImage = ((lulPixelWidth + 3) & ~3) * lulPixelHeight;
试试看
如图是XP系统预览和画图软件看到的同一张BMP图(同一个文件啊!),效果竟然不一样。这是一张我自己编码生成的8位位图,虽然只用了黑白色,但是为了方便缩放,所以用的8位。
重点来了,为什么效果会不一样?画图中的效果是正常的效果(win7上显示的就都是这样),但是预览的效果竟然不是这样,画到emf中也是那个预览的效果,导致打印出来扫不出来啊!
从图上可以看出,图片数据是正常的,就是位置发生了错位。似乎预览软件是从数据段中间开始取数据了,如果是这样,那他怎么还能正常的取到前面的数据呢?这说明应该不是我的BMP头中数据偏移位置指错了吧。
不知道又没人遇到过这个问题,求分析,求帮助
另外附上源文件下载链接:http://download.****.net/detail/a2619308/8156629
------解决思路----------------------
也许是你没考虑一行像素数据需要四字节对齐。
------解决思路----------------------
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;
红的不对
------解决思路----------------------
// 颜色表
RGBQUAD ldColorTable[256] = {{0,0,0,0},{255,255,255,0}};
for(int i = 0; i < 256; ++i)
{
ldColorTable[i].rgbBlue = i;
ldColorTable[i].rgbGreen = i;
ldColorTable[i].rgbRed = i;
ldColorTable[i].rgbReserved = 0;
}
// 256 grey color
而
+ 2 * sizeof(RGBQUAD)
只有 2个 ?
------解决思路----------------------
69行
ldBmpInfoHeader.biSizeImage = 0;
改为
ldBmpInfoHeader.biSizeImage = ((lulPixelWidth + 3) & ~3) * lulPixelHeight;
试试看