创建图片缓冲的问题

nieshigui 2016-01-03 05:00:52
HDC my_load = CreateCompatibleDC(NULL);
HBITMAP my_image = (HBITMAP)::LoadImage(NULL, _T("e:\\1.bmp"), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
HGDIOBJ my_obj = SelectObject(my_load , my_image);
SetBkMode(my_load , TRANSPARENT); //-设字体输出时文字背景透明
::TextOut(my_load , 0 , 0 , L"中国人民共和国" , 4);

RECT form_size; ::GetWindowRect(this->m_hWnd, &form_size); // 获取窗口的绘图区域
HDC my_create_hdc = ::CreateCompatibleDC(::GetDC(this->m_hWnd));
HBITMAP bmp = CreateCompatibleBitmap(my_create_hdc, form_size.right - form_size.left, form_size.bottom - form_size.top);
HDC my_mem_hdc;
SelectObject(my_create_hdc, bmp);

::StretchBlt(my_create_hdc , 0 , 0 , 295 , 295 , my_load , 0 , 0 , 295 , 295 , SRCCOPY);
::StretchBlt(::GetDC(this->m_hWnd), 0, 0, 295, 295, my_create_hdc, 0, 0, 295, 295, SRCCOPY);

//BitBlt(my_create_hdc, 0, 0, 295, 295, my_load, 0, 0, SRCCOPY);
//BitBlt(::GetDC(this->m_hWnd), 0, 0, 295, 295, my_load, 0, 0, SRCCOPY);

这段代码执行是没有问题的,但是从e:\\1.bmp读取的图片放到窗口上时变成黑白的了,应该是要设my_create_hdc的一些彩色信息,不知道怎么设,谁能指点下。
...全文
114 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2016-01-04
  • 打赏
  • 举报
回复
晕死, :StretchBlt(my_create_hdc , 0 , 0 , 295 , 295 , my_load , 0 , 0 , 295 , 295 , SRCCOPY); ::StretchBlt(::GetDC(this->m_hWnd), 0, 0, 295, 295, my_create_hdc, 0, 0, 295, 295, SRCCOPY); 不需要这么麻烦,这两个合并起来就可以,不需要再弄个中间dc,画虎不成反类犬 CDC* pDC=GetDC(); ::StretchBlt(pDC, 0, 0, 295, 295, my_Load, 0, 0, 295, 295, SRCCOPY); ..........
worldy 2016-01-04
  • 打赏
  • 举报
回复
:StretchBlt(my_create_hdc , 0 , 0 , 295 , 295 , my_load , 0 , 0 , 295 , 295 , SRCCOPY); ::StretchBlt(::GetDC(this->m_hWnd), 0, 0, 295, 295, my_create_hdc, 0, 0, 295, 295, SRCCOPY); 不需要这么麻烦,这两个合并起来就可以,不需要再弄个中间dc,画虎不成反类犬 CDC* pDC=GetDC(); ::StretchBlt(pDC-m_hWnd, 0, 0, 295, 295, my_Load, 0, 0, 295, 295, SRCCOPY); ..........
worldy 2016-01-04
  • 打赏
  • 举报
回复
::StretchBlt(my_create_hdc , 0 , 0 , 295 , 295 , my_load , 0 , 0 , 295 , 295 , SRCCOPY); ::StretchBlt(::GetDC(this->m_hWnd), 0, 0, 295, 295, my_create_hdc, 0, 0, 295, 295, SRCCOPY); 不需要这么麻烦,这两个合并起来就可以,不需要再弄个中间dc,画虎不成反类犬 CDC* pDC=GetDC(); ::StretchBlt(::GetDC(pDC-m_hWnd, 0, 0, 295, 295, my_Load, 0, 0, 295, 295, SRCCOPY); ..........
Yofoo 2016-01-04
  • 打赏
  • 举报
回复
CreateCompatibleBitmap 的第一个参数不要用 内存dc, 换成 ::GetDC(this->m_hWnd) 这个 因为内存dc在刚刚创建时默认会有个小的黑白bitmap, 用这个来 CreateCompatibleBitmap 导致创建出来的会是黑白的 另外不要每次都 ::GetDC(this->m_hWnd) , 用了GetDC 需要释放的

15,979

社区成员

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

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