MFC 中CImage类的问题
voidC测试2005Dlg::OnBnClickedButton1(){//TODO:在此添加控件通知处理程序代码HWNDhwnd=::GetDesktopWindow...
void C测试2005Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
HWND hwnd = ::GetDesktopWindow();
HDC hDC = ::GetDC(hwnd);//获取屏幕DC
RECT rect;
::GetClientRect(hwnd, &rect);//获取屏幕大小
HDC hDCMem = ::CreateCompatibleDC(hDC);//创建兼容DC
HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right, rect.bottom);//创建兼容位图
HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//将位图选入DC,并保存返回值
::BitBlt(hDCMem, 0, 0, rect.right, rect.bottom, hDC, 0, 0, SRCCOPY);//将屏幕DC的图象复制到内存DC中
CImage image;
image.Attach(hBitMap);
image.Draw(::GetDC(this->m_hWnd),0,0,495,455,0,0,495,455);
HRESULT hResult = image.Save( _T("d:\\new.jpg"));
if(FAILED(hResult))
MessageBox(_T("保存图像文件失败!"));
else
MessageBox(_T("保存图像文件成功!"));
image.Detach();//解除位图和CImage对象的绑定
::SelectObject(hDCMem, hOldMap);//选入上次的返回值
//释放
::DeleteObject(hBitMap);
::DeleteDC(hDCMem);
::DeleteDC(hDC);
}
能不能请高手看看?为什么这段程序老是报错?
能不能告诉我怎么确定错误在draw函数内部?我是新手,不懂额....
qsw602a能不能加下我的QQ71907239? 展开
{
// TODO: 在此添加控件通知处理程序代码
HWND hwnd = ::GetDesktopWindow();
HDC hDC = ::GetDC(hwnd);//获取屏幕DC
RECT rect;
::GetClientRect(hwnd, &rect);//获取屏幕大小
HDC hDCMem = ::CreateCompatibleDC(hDC);//创建兼容DC
HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right, rect.bottom);//创建兼容位图
HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//将位图选入DC,并保存返回值
::BitBlt(hDCMem, 0, 0, rect.right, rect.bottom, hDC, 0, 0, SRCCOPY);//将屏幕DC的图象复制到内存DC中
CImage image;
image.Attach(hBitMap);
image.Draw(::GetDC(this->m_hWnd),0,0,495,455,0,0,495,455);
HRESULT hResult = image.Save( _T("d:\\new.jpg"));
if(FAILED(hResult))
MessageBox(_T("保存图像文件失败!"));
else
MessageBox(_T("保存图像文件成功!"));
image.Detach();//解除位图和CImage对象的绑定
::SelectObject(hDCMem, hOldMap);//选入上次的返回值
//释放
::DeleteObject(hBitMap);
::DeleteDC(hDCMem);
::DeleteDC(hDC);
}
能不能请高手看看?为什么这段程序老是报错?
能不能告诉我怎么确定错误在draw函数内部?我是新手,不懂额....
qsw602a能不能加下我的QQ71907239? 展开
展开全部
将::selectobject(hdcmem, holdmap)这行移到image.draw函数之前。
错误原因是在draw函数内部,这个函数也会将图片selectobject到一个HDC中,这样,你创建的图片就分别selectobject到两个hdc内,就会出错。具体为什么会出错,我也不清楚。
在Draw那边设个断点,按F5进入调试,点击按键,VS会触发断点,这是按F11就可以查看Draw函数的具体源代码了。
也可以利用VS的搜索,路径为你安装的VS的路径,也能搜索到具体的Draw源代码
错误原因是在draw函数内部,这个函数也会将图片selectobject到一个HDC中,这样,你创建的图片就分别selectobject到两个hdc内,就会出错。具体为什么会出错,我也不清楚。
在Draw那边设个断点,按F5进入调试,点击按键,VS会触发断点,这是按F11就可以查看Draw函数的具体源代码了。
也可以利用VS的搜索,路径为你安装的VS的路径,也能搜索到具体的Draw源代码
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询