在c++builder中,已得到位图句柄,如何显示图片呢

xiao234666 2008-03-13 11:02:10
如题,在c++builder中,已得到位图句柄,如何显示图片呢?
...全文
244 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiao234666 2008-03-26
  • 打赏
  • 举报
回复
thank you !ccrun!
xiao234666 2008-03-14
  • 打赏
  • 举报
回复
妖哥,我试了下你的方法,可还是不行.
我程序里得到的hBitmap值是一个unsigned int类型的,是否是这个类型的问题呢?我试过把它强制转换成HANDLE或HBITMAP都不行.
ccrun.com 2008-03-14
  • 打赏
  • 举报
回复
那说明你这个句柄未必有效。
HBITMAP和HANDLE都是void *,可以互相强制转换成int或unsigned int

仔细检查一下hBitmap的来源吧。
xiao234666 2008-03-13
  • 打赏
  • 举报
回复
能不能说得更具体点.该函数得最后一个参数怎么得来的
i_love_pc 2008-03-13
  • 打赏
  • 举报
回复
StretchBlt()
ccrun.com 2008-03-13
  • 打赏
  • 举报
回复
HANDLE和HDC是两回事(尽管看起来都是void *),千万不要搞混了。
如果你确认已获取到正确的HBITMAP,显示在出来可以这样:
1. 直接显示在Form上
    HBITMAP hBitmap = XXXX; // 假设是个有效的值
HDC hdcForm = GetDC(Form1->Handle); // 显示在Form1上
HDC hdcBitmap = CreateCompatibleDC(0);
HBITMAP hbmpOld = (HBITMAP)SelectObject(hdcBitmap, hBitmap);

// 第四和第五个参数分别代表位图的宽和高
BitBlt(hdcForm, 1, 1, 32, 32, hdcBitmap, 0, 0, SRCCOPY);

SelectObject(hdcBitmap, hbmpOld);
DeleteDC(hdcBitmap);

ReleaseDC(Handle, hdcForm);


2. 一个更简单的方法,放置一个TImage在Form上,然后:
    HANDLE hBitmap = XXX; // 假设是个有效的值
if(hBitmap)
{
Image1->Picture->Bitmap->Handle = hBitmap;
}
xiao234666 2008-03-13
  • 打赏
  • 举报
回复
  我用了楼上说的方法,
StretchBlt(Image1->Canvas->Handle,0,0,850,1100,(TW_HANDLE)hBitmap,0,0,850,1100,SRCCOPY);
  参数中,hBitmap是程序中得到的一个unsigned long类型的数据,通过TW_HANDLE(即HANDLE)转换,应该满足参数要求了吧

  可关键是执行后还是显示不出任何东西,只是白色一片.通过调试发现函数执行没有成功.

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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