最近自学游戏引擎设计,希望将各种图片格式读入内存后转为HBITMAP处理,四处搜寻无果,最终参考以下两篇博文自己搞定之
http://blog.csdn.net/wu_xiangwei/article/details/5096529
http://www.cnblogs.com/xiangism/archive/2012/10/16/2725692.html
废话不多说,先上关键代码
//将CxImage转为位图
HBITMAP Draw::ChangeCxImageToBMP(HDC hDC,CxImage* cximage)
{
//创建HBITMAP
HBITMAP BMP=CreateCompatibleBitmap(hDC,cximage->GetWidth(),cximage->GetHeight());
BITMAP bm;
GetObject(BMP,sizeof(BITMAP),&bm);
int pb=bm.bmBitsPixel/8; //获取位图位数
int BytesPerLineOut = (bm.bmWidth*pb + 3) / 4 * 4; //计算每行像素的数据长度
BYTE *pxd = new unsigned char[bm.bmHeight*BytesPerLineOut]; //声明暂存数组
if(cximage->GetBpp()>=16)
{
//直接获取像素数据
int pbx=cximage->GetBpp()/8; //获取CxImage图片的位数
int BytesPerLine = (bm.bmWidth*pbx + 3) / 4 * 4; //计算CxImage每行像素的数据长度
BYTE *pDib = cximage->GetBits(); //获取CxImage图片的像素数据