如何使用Stretchblt获取调整位图图像大小的方法 [英] how to get resize bitmap image using stretchblt

查看:535
本文介绍了如何使用Stretchblt获取调整位图图像大小的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的mfc应用程序中,我有一个对话框和一个图片控件(245,26,204,184),其ID为IDC_pic.
我的代码是

SecondDlg.cpp

In my mfc application I have dialog box and a picture control(245,26,204,184) its id is IDC_pic.
My code is

SecondDlg.cpp

void CSecondDlg::DoDataExchange(CDataExchange* pDX)
 {
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_pic, m_nHeight); //m_nHeight is CStatic object
}
void SecondDlg::OnBnClickedButton1()
{
	
	if(m_flag && m_hBmp)
	{
		capEditCopy(hMyWindow);
		OpenClipboard();
		m_hBmp = (HBITMAP)::GetClipboardData(CF_BITMAP);
		m_hBmp = (HBITMAP)::GetClipboardData(CF_BITMAP);
		m_nHeight.SetBitmap(m_hBmp); //here working fine
		BITMAP bm;
		GetObject(m_hBmp,sizeof(BITMAP),&bm);
		HDC TempHDC,TempHDC1;
		TempHDC1 = ::CreateCompatibleDC(NULL);
		SelectObject(TempHDC1,m_hBmp);
		CRect c1(245,26,24,14),c2(245,26,204,184);
		int rest=::StretchBlt(TempHDC1,550,157,50,50, TempHDC1, c2.left,c2.top,bm.bmWidth,bm.bmHeight, SRCCOPY ); 
		hOldBitmap2=CreateCompatibleBitmap(TempHDC1,204,184);
		GetObject(hOldBitmap2,sizeof(BITMAP),&bm);
		m_nHeight.SetBitmap(hOldBitmap2);
		DeleteDC(TempHDC);
 		CloseClipboard();		
	}
}


我在SecondDlg上具有图片控件(ID为IDC_pic).
现在IDC_pic出现黑屏了.


I have picture control(id is IDC_pic) on SecondDlg.
Now IDC_pic got black screen.

推荐答案

您好,

DoModal对话框的UI内容之后的that bcs被销毁(在对话框中您应该收到WM_DESTROY)

最好在第二个对话框中分别具有HBITMAP 变量,您将在第二个对话框内的覆盖的OnOK对话框方法中进行更新.在您的方法上,只需为该值调用secong对话框即可,而无需调用UI控件.

您可以尝试使用Gdiplus而不是GDI来处理图像和绘图.

此外,请确保已创建ID = 6的控件,并且该控件GetDlgCtrlID 返回6,但最好在类范围内为该静态变量保留变量,因为您应该确保销毁创建的静态类的对象.

问候,
Maxim.
Hello,

Thats bcs after DoModal UI stuff of dialog are destroyed (in dialog you should receive WM_DESTROY)

Better to have HBITMAP variable separately in second dialog which you will do updating in overriden OnOK dialog method inside your second dialog. And on your method just call secong dialog for that value, without calling UI controls.

You may try to use Gdiplus instead of GDI for handling images and drawing.

Additionally, be sure taht your control with ID = 6 is created and it GetDlgCtrlID returns 6, but maybe better to keep variable for that static in class scope as you should be sure that object of static class you created is destroyed.

Regards,
Maxim.


这篇关于如何使用Stretchblt获取调整位图图像大小的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆