已经知道图象数据和图象宽高,如何得到HBITMAP?

yzhshty 2005-12-16 10:20:15
dataPtr是数据指针,hDC是打印机dc,我是按照如下方法使用的:

BITMAPINFOHEADER bmih;
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biWidth = nWidth;
bmih.biHeight = -nHeight;
bmih.biPlanes = 1;
bmih.biBitCount = 24;
bmih.biCompression = BI_RGB;
bmih.biSizeImage = 0;
bmih.biXPelsPerMeter= 0;
bmih.biYPelsPerMeter= 0;
bmih.biClrImportant = 0;
bmih.biClrUsed = 0;

HBITMAP hbit = CreateDIBitmap(hDC,&bmih,CBM_INIT,dataPtr,(BITMAPINFO*)&bmih,DIB_RGB_COLORS);

现在的现象是CreateDIBitmap在2000和xp下总能成功,但在98和winme下就不确定,有时候可以成功,有时候就直接死在CreateDIBitmap里面,连返回值也得不到,这个到底是什么原因?我可以用别的函数代替CreateDIBitmap吗?

问题解决了200分,决不食言
...全文
172 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzhshty 2005-12-16
  • 打赏
  • 举报
回复
用的是DIB_RGB_COLORS

我也在想是不是BITMAPINFO和BITMAPINFOHEADER的原因
今天来不及 做测试了,我估计CreateDIBitmap可能是我下的参数不对
pomelowu 2005-12-16
  • 打赏
  • 举报
回复
用PBITMAPINFO,BITMAPINFOHEADER只是其中一个成员。
另外,用的DIB_RGB_COLORS?
yzhshty 2005-12-16
  • 打赏
  • 举报
回复
lpBitsInfo里面就是一个BITMAPINFOHEADER ,和上面是一样的
pomelowu 2005-12-16
  • 打赏
  • 举报
回复
呵呵~是不是lpBitsInfo没设置对?
yzhshty 2005-12-16
  • 打赏
  • 举报
回复
晕了,打出来是黑白
yzhshty 2005-12-16
  • 打赏
  • 举报
回复
64位机做测试用,呵呵,目前的要求是Win98\WinMe\Win2k\Winxp平台下要支持各种语言的32和64位机,改动一次代码要做n次测试~~~~
代码现在已经修改进去,等我测试测试再看,先谢谢你了!
pomelowu 2005-12-16
  • 打赏
  • 举报
回复
64位机上装98是不是浪费了点。。。:)

用StretchDIBits试试看,第一个参数是打印机的DC。MSDN中有一篇文章“Printing a Document”,里边有例子
yzhshty 2005-12-16
  • 打赏
  • 举报
回复
谢谢pomelowu(羽战士) ( ) 的回复!

16m的限制我已经做了处理.98下也不是都显示不出来,我截止目前发现,只在64位机上装了98或me的时候才会出现这个问题(),32位机上装98或me都能正常打印

你说的BITMAPV5HEADER我也试过,编译不能过,不认识这个结构.

我现在也不想管CreateDIBitmap这个函数为什么不稳定了,我现在的目标是:
已经知道了图象数据以及宽和高,怎么把他打印到打印机上?一个点一个点的画也可以,就是太慢:(
pomelowu 2005-12-16
  • 打赏
  • 举报
回复
CreateDIBitmap在98/Me下不能创建大小超过16MB的位图。另外,试试看用BITMAPV5HEADER替代BITMAPINFOHEADER (98/Me/200下)

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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