GDI+抓屏后改变色深

yiyefangzhou24 2018-04-13 01:26:31
有一个GDI+抓屏保存cimage 的实例
//获取屏幕截图
CImage old_image;
HWND hWnd = ::GetDesktopWindow();//获得屏幕的HWND.
HDC hScreenDC = ::GetDC(hWnd); //获得屏幕的HDC.
HDC MemDC = CreateCompatibleDC(hScreenDC);
RECT rect;
::GetWindowRect(hWnd,&rect);

HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC,rect.right,rect.bottom);
HGDIOBJ hOldBMP = SelectObject(MemDC,hBitmap);
BitBlt(MemDC,0,0,rect.right,rect.bottom,hScreenDC,rect.left,rect.top,SRCCOPY);
hBitmap=(HBITMAP)SelectObject(MemDC,hOldBMP);

old_image.Attach(hBitmap);

//压缩图像
CImage new_image;
CRect new_rect(0,0,width,height);
new_image.Create(width, height,bpp);//bpp为需要变化的色深大小 当bpp=8时会变成全黑
SetStretchBltMode(new_image.GetDC(), HALFTONE);
new_image.ReleaseDC();
old_image.StretchBlt(new_image.GetDC() , new_rect);
new_image.ReleaseDC();

CreateCompatibleBitmap抓取的图像是32位的,我看了些资料,说是创建一个cimage,并且在创建的时候就设定好色深,然后拷贝,那么新的new_image的色深就被改变了,但是事实上没有,并且当我将代码中bpp设定成8(转成8位灰度图像)时,new_image的图像是全黑的,有何方法改变色深?
...全文
1112 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-04-20
  • 打赏
  • 举报
回复
Image Magick
schlafenhamster 2018-04-20
  • 打赏
  • 举报
回复
好像要 专门处理! 32 位 到 24位 去 透明, 24位 到 8位 https://download.csdn.net/download/schlafenhamster/3992785 “24to8Colors.zip“
worldy 2018-04-20
  • 打赏
  • 举报
回复
想改变位图深度, HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC,rect.right,rect.bottom); 改为 CreateDIBSection,BitBlt后,可以直接操作位图内存
qq_38687221 2018-04-19
  • 打赏
  • 举报
回复
看下msdn上关于cimage的描述。想改变色深的话也可以直接对像素值操作,对应的值减少就可以。
yiyefangzhou24 2018-04-13
  • 打赏
  • 举报
回复

15,979

社区成员

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

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