将::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函数有两种,有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)