hdc 问题

qq_20446485 2016-11-05 10:31:51
BITMAP bmpInfo;
HBITMAP hBitmap;
hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(), L"e:\\1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
::GetObject(hBitmap , sizeof(BITMAP) , (LPBYTE)&bmpInfo);
RECT rc, rw;
::GetClientRect(this->m_hWnd, &rc);
::GetWindowRect(this->m_hWnd, &rw);
HDC hDC = ::GetDC(this->m_hWnd);
HDC dcCompatible = ::CreateCompatibleDC(hDC);
::SelectObject(dcCompatible, hBitmap);
::SetBkMode(dcCompatible,TRANSPARENT);
HBITMAP temp_bmp;
HDC temp_hdc = ::CreateCompatibleDC(hDC);// ::GetDC(NULL);
::SetDIBColorTable(temp_hdc, 0, uNumEntries, &prgb);


temp_bmp = ::CreateCompatibleBitmap(temp_hdc, bmpInfo.bmWidth, bmpInfo.bmHeight); //创建兼容位图
::SelectObject(temp_hdc , temp_bmp);

::StretchBlt(temp_hdc, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, dcCompatible, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY);
//::BitBlt(temp_hdc, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, dcCompatible, 0, 0, SRCCOPY);
::BitBlt(hDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, temp_hdc, 0, 0, SRCCOPY);

想请教下为什么把从磁盘读取的BMP图片放到temp_hdc 后在显示在窗口中变成了黑白的?只知道需要设置,但不知道用什么API怎么去设置temp_hdc ,谁能指点下。
...全文
999 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_20446485 2016-11-06
  • 打赏
  • 举报
回复
确实是这个问题,大神,能否把你QQ告诉我下,另外在请教你个小问题啊。
Yofoo 2016-11-05
  • 打赏
  • 举报
回复
temp_bmp = ::CreateCompatibleBitmap(temp_hdc, bmpInfo.bmWidth, bmpInfo.bmHeight); //创建兼容位图 第一个参数错误, 应该用hDC, temp_hdc新创建的DC其实自动生成了一个bitmap, 为了节省空间其实是个黑白的, 所以后面表现出来的是黑白的

15,979

社区成员

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

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