CreateDIBSection用法

orange519 2005-08-04 11:11:19
我原来在VC下写了一个显示JPEG文件的程序,现在需要移植到WinCE中,但在WinCE中不支持 CreateDIBitmap函数,所以我就用CreateDIBSection来代替(或有其他更好的办法,望赐教),我的代码如下:
hDc=GetDC(hWnd);
char *ptData=(char *)lpPtr;
hBitmap=CreateDIBSection(hDc,(BITMAPINFO *)lpImgData,DIB_RGB_COLORS,
(void **)&ptData,NULL, 0);
memcpy(ptData, lpPtr, ImgSize);

说明:
lpImgData指针指向"BITMAPINFO+位图数据"
lpPtr指针指向“位图数据”

最后一句要说明一下,ptData就是指向lpPtr的指针,为什么要自己向自己拷贝一遍呢?原因我也不知道,只是跟着感觉这样用了,在VC中就可以正常显示,不这样反而不能显示。但移植到WinCE中就无法工作。调试发现hBitmap始终指向0x0000000,这说明创建失败,但原因是什么呢?
当然如果你有其他办法请不吝赐教!!!
...全文
229 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
无聊客 2005-08-04
  • 打赏
  • 举报
回复
首先你要初始化一个结构BITMAPINFO,告诉系统你要创建多大的buffer,然后系统会把创建好的数据区指针返回给你,就是ptData,到时候你把数据拷贝上去显示就OK了
orange519 2005-08-04
  • 打赏
  • 举报
回复
各位高人给点建议吧,还有没有其他函数可以创建DIB。
orange519 2005-08-04
  • 打赏
  • 举报
回复
郁闷了一个中午后,我终于发现了问题,原来WinCE对创建的DIBSection是有限制的,
如果把图片的尺寸缩小,就可以创建成功。我用的是WinCE.net,SDK4.2和evc4的开发
环境。经过多次试验大概图片2000*1100以下就可以创建成功,如果大于这个尺寸可能就
无法创建创建成功了。

orange519 2005-08-04
  • 打赏
  • 举报
回复
我都初始化好了,代码如下:
BITMAPFILEHEADER bf;
bi.biSize=(DWORD)sizeof(BITMAPINFOHEADER);
bi.biWidth=(LONG)(ImgWidth);
bi.biHeight=(LONG)(ImgHeight);
bi.biPlanes=1;
bi.biBitCount=24;
bi.biClrUsed=0;
bi.biClrImportant=0;
bi.biCompression=BI_RGB;
NumColors=0;
//WIDTHBYTES是一个用来计算每行需要多少个字节的宏
LineBytes=(DWORD)WIDTHBYTES(bi.biWidth*bi.biBitCount);
ImgSize=(DWORD)LineBytes*bi.biHeight;
ImgSize=(DWORD)LineBytes*bi.biHeight;

char *ptData=new char[ImgSize];
hBitmap=CreateDIBSection(hDc,(BITMAPINFO *)&bi,DIB_RGB_COLORS,
(void **)&ptData,NULL, 0);
//lpPtr是数据存放的地方
memcpy(ptData, lpPtr, ImgSize);

现在的问题是CreateDIBSection总是返回NULL,根本不能创建。

19,503

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧