本人做图像相关程序时先后在BMP文件的读写上遇到了如下麻烦:1.用LoadImage固然方便,可是要取得图像的Height和Width的时候(用GetBitmapDimensionEx)取出来的都是0。本来取长宽方向像素数目也是为了用GetBitmapBits取位图数据。2.经人指点,自己写函数读写BMP文件,目的是为了取出BITMAPINFOHEADER,结果现在不知该如何处理位图文件中BITMAPINFOHEADER后面的颜色表。BITMAPINFOHEADER后面到底是什么好像有很多种情况。哪位能够给个详细的说明呢?3.是不是取得了文件中的BITMAPINFOHEADER和位图数据后就可以用CreateDIBitmap创建一个位图而得到位图句柄了呢?4.自己写的类的头文件中包含<wingdi.h>的时候,编译报错,而且都是wingdi.h中的错误,主要是missing ';' before identifier ×××;最后一个是fatal error C1004: unexpected end of file found,不知为什么,谢谢指点。
不知道你读入BMP文件是作什么用,如果只是显示的话,不用这么复杂的
显示用LoadImage就可以了,你要用GetObject获得长宽
BITMAP bm;
GetObject(&bm,..)
你可以找到非常多的答案的:http://www.vckbase.com/document/viewdoc/?id=674
http://www.vczx.com/article/show_srccode.php?id=306
......
现成的也有,你google一下CDib,一堆。
创建与设备兼容内存,然后创建与设备兼容位图, 然后内存SELECT位图进去,方法有几种4,可能缺少},认真检查
BITMAP bm;
GetObject(hBmp, sizeof(bm), &bm);
SIZE bmSize;
bmSize.cx = bm.bmWidth;
bmSize.cy = bm.bmHeight;
4.最好直接包含Windows.h
{
HBITMAP hBitmap; //定义位图句柄
BITMAPINFO * pbi; //定位位图信息头
pbi=(BITMAPINFO *)malloc(sizeof(BITMAPINFO)); //申请空间
hBitmap=(HBITMAP)LoadImage(0,str,IMAGE_BITMAP,0,0,LR_DEFAULTCOLOR|LR_LOADFROMFILE); //装载位图
pbi->bmiHeader.biSize=sizeof(BITMAPINFOHEADER); //初始化
pbi->bmiHeader.biBitCount=0;
GetDIBits(Hdc,hBitmap,0,0,NULL,pbi,DIB_PAL_COLORS); //获得位图信息头信息
Hdcnew=CreateCompatibleDC(Hdc); //定义与Hdc相兼容的内存设备
SelectObject(Hdcnew,hBitmap); //将位图转载到内存DC
BitBlt(Hdc,x,y,pbi->bmiHeader.biWidth,pbi->bmiHeader.biHeight,Hdcnew,0,0,SRCCOPY); //显示位图
return true;
}