怎么将HDC的一个区域保存为背景透明的图片呢

小崔爱读书 2009-12-07 11:25:35
大家好,我做了一个窗口,在上面可以用鼠标绘制一些曲线,实现一个手写签批的功能,现在我要将写在窗口中的图形保存为背景透明的图片,怎么做呢?我保存后的图片都是背景白色的。
我看ATL::CImage有TransparentColor的方面,但我设置后就提示出错了,说m_nBPP好像必须为4或者8,但我也不知道怎么把我的HDC中图片转成8位位图啊。。。反正很着急。
代码如下,望各位帮忙。

void DC2Pic::savePic(HDC *dc,RECT *rect){
HDC memdc;
HBITMAP memBmp;

memdc=::CreateCompatibleDC(*dc);
memBmp=::CreateCompatibleBitmap(*dc,rect->right,rect->bottom);
SelectObject(memdc,memBmp);
BitBlt(memdc,rect->left,rect->top,rect->right,rect->bottom,*dc,rect->left,rect->top,SRCCOPY);



RECT dRect;
dRect.left=0; dRect.top=0;
dRect.bottom=rect->bottom-rect->top;
dRect.right=rect->right-rect->left;

CImage img;
img.Attach(memBmp);


if(img.IsTransparencySupported()&&(img.GetBPP()==4||img.GetBPP()==8)){
img.SetTransparentColor(RGB(255,255,255));
}

img.Save(L"d:/testpng1.png",Gdiplus::ImageFormatGIF);

}
...全文
378 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小崔爱读书 2009-12-08
  • 打赏
  • 举报
回复
反正最终我也没解决,以后再研究吧。
小崔爱读书 2009-12-07
  • 打赏
  • 举报
回复
一楼的建议我正在试验,二楼的那个,我试了,也是报错。不知道CImage为什么不能直接保存为透明的呢?那这两个方面应该怎么用啊?也没看到什么地方有好的解释。
mazm_yanzhu 2009-12-07
  • 打赏
  • 举报
回复
支持1楼
  • 打赏
  • 举报
回复
试试CImage::TransparentBlt
_JeffreyWu 2009-12-07
  • 打赏
  • 举报
回复
对位图做掩码运算
TRUE 2009-12-07
  • 打赏
  • 举报
回复
mark
fandh 2009-12-07
  • 打赏
  • 举报
回复
好像要过滤吧!

19,469

社区成员

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

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