MFC 中CImage类的问题

MFC 中CImage类的问题,第1张

将::selectobject(hdcmem, holdmap)这行移到imagedraw函数之前。

错误原因是在draw函数内部,这个函数也会将selectobject到一个HDC中,这样,你创建的就分别selectobject到两个hdc内,就会出错。具体为什么会出错,我也不清楚。

在Draw那边设个断点,按F5进入调试,点击按键,VS会触发断点,这是按F11就可以查看Draw函数的具体源代码了。

也可以利用VS的搜索,路径为你安装的VS的路径,也能搜索到具体的Draw源代码

诸位不要胡说,看我的代码

这是直接用CImage截屏,不需要CBitmap,也不用保存为BMP再转换

BOOL bFull=true;//是否截全屏,false则只截取当前活动的窗体

CImage image;

CWnd pWnd;

CRect rect;

BOOL bStat;

if(bFull)

pWnd = CWnd::GetDesktopWindow();

else

pWnd = CWnd::GetActiveWindow();

ASSERT(pWnd);

if(pWnd == NULL)

return FALSE;

CWindowDC winDC(pWnd);

pWnd->GetWindowRect(&rect);

int nBPP = winDCGetDeviceCaps(BITSPIXEL) winDCGetDeviceCaps(PLANES);

if(nBPP < 24) nBPP = 24;

bStat = imageCreate(rectWidth(), rectHeight(), nBPP);

ASSERT(bStat);

if(!bStat)

return FALSE;

CImageDC imageDC(image);

::BitBlt(imageDC, 0, 0, rectWidth(), rectHeight(), winDC, 0, 0, SRCCOPY);

SYSTEMTIME sys;

GetLocalTime(&sys);

m_StaticTimeFormat("%4d%02d%02d%02d%02d%02d",syswYear,syswMonth,syswDay,syswHour,syswMinute,syswSecond);

HRESULT hr = imageSave("img\\" + m_StaticTime + "jpg");

一种Load(IStream )和Load(LPCTSTR )

这两个方法的不同在于其内部构建Bitmap对象的方式不同,前者为Gdiplus::Bitmap bmSrc( IStream pStream ); 后者为Gdiplus::Bitmap bmSrc( (CT2W)pszFileName);至于这两者之间的差别可以继续调试查看源码比较。

~如果你认可我的回答,请及时点击采纳为满意回答按钮

~~手机提问的朋友在客户端右上角评价点满意即可。

~你的采纳是我前进的动力

~~O(∩_∩)O,记得好评和采纳,互相帮助,谢谢。

以上就是关于MFC 中CImage类的问题全部的内容,包括:MFC 中CImage类的问题、vc 截取屏幕、在CImage类中,Load函数有两种,有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9531595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存