我的代码大致是这样的:
PBITMAPINFOHEADER bmih;
PBITMAPINFO bmi;得到bmi 和bmi的指针后;if (bmih->biBitCount > 8)
lpData = bmih + sizeof(BITMAPINFOHEADER);
else
lpData = bmih + sizeof(BITMAPINFO);StretchDIBits(hDC, nX, nY, nWidth, nHeight, 0, 0, bmih->biWidth, bmih->biHeight, lpData, bmi, DIB_RGB_COLORS,SRCCOPY);
显示24位的bmp是好的,可是显示8位的BMP时就错位了。
PBITMAPINFOHEADER bmih;
PBITMAPINFO bmi;得到bmi 和bmi的指针后;if (bmih->biBitCount > 8)
lpData = bmih + sizeof(BITMAPINFOHEADER);
else
lpData = bmih + sizeof(BITMAPINFO);StretchDIBits(hDC, nX, nY, nWidth, nHeight, 0, 0, bmih->biWidth, bmih->biHeight, lpData, bmi, DIB_RGB_COLORS,SRCCOPY);
显示24位的bmp是好的,可是显示8位的BMP时就错位了。
解决方案 »
- 关于动态库dll弹出框的问题求教!
- Win32 API如何点击ComboBox下拉按钮显示月历控件
- CTreeCtrl第一次单击根目录项左面的扩展+,展开后马上自动收缩问题?
- 高手请进来
- 如何修改CMainFrame可调边框的颜色?也就是非客户区的颜色.
- 关于资源调用中强制类型转换问题
- 关于telnet的问题(100分)
- 谁能帮我实现在NT、2000下读写物理内存的高端?如FFF00000H - FFFFFFFFH
- 请教达人: WiFi 转 SCI 模块
- 用VC做个项目,由于处理的的方法比较复杂,就做了十几个对话框进行操作,这样就有十几个类呀?太乱了,条理也不清楚.这中情况怎么办?大家是如何做的?
- 推荐一下,linux编程看那本书?
- 请问何如清空fstream文件的内容,何如得知fstream文件里面是没有内容的?
PBITMAPINFOHEADER bmih;
PBITMAPINFO bmi;得到bmi 和bmi的指针后;if (bmih->biBitCount >= 8) *********(这里改成>=)***********
lpData = bmih + sizeof(BITMAPINFOHEADER);
else
lpData = bmih + sizeof(BITMAPINFO);StretchDIBits(hDC, nX, nY, nWidth, nHeight, 0, 0, bmih->biWidth, bmih->biHeight, lpData, bmi, DIB_RGB_COLORS,SRCCOPY);
显示24位的bmp是好的,可是显示8位的BMP时就错位了。
if (bmih->biBitCount >8)
lpData = bmih + sizeof(BITMAPINFOHEADER);
else
{
//别望了还有条色班数据呀1
int nClrTable=bmih->biBitCount<<1 ;
lpData = bmih + sizeof(BITMAPINFO)+sizeof(RGBQUAD)*nClrTable;
}
if (bmih->biBitCount >8)
lpData = bmih + sizeof(BITMAPINFOHEADER);
else
{
//别望了还有条色班数据呀1
//不好意思我的代码有误,该为
int nClrTable=1<<bmih->biBitCount
lpData = bmih + sizeof(BITMAPINFO)+sizeof(RGBQUAD)*nClrTable;
}
//还有其实BITMAPFILEHEADER 里面就有数据的偏移量呀