当前位置:C++技术网 > 资讯 > LoadImage函数与FromFile函数

LoadImage函数与FromFile函数

更新时间:2015-12-30 19:23:33浏览次数:1+次

两者都是用来在程序中引入图片,在《学习心得之八------实现从磁盘读入图片文件》中,我对LoadImage函数做了解释,也有实例进行讲解,你可以看看。对于FromFile函数:

public:
static Image^ FromFile(
	String^ filename
)
这个函数在GDI+绘图中应用很广,C#编程中也是,FromFile函数就是根据路径引入图片对象,在《利用GDI+处理水印(2)

中有这个函数的具体应用,在那篇文章中,我们就是利用这个函数引入图片,从而添加水印。我之前研究过fromHandle函数,但是具体的笔记找不到了,这个函数是根据句柄来引入对象。
我为什么要讲这两个函数呢?那是因为,我觉得LoadImage这个函数比较坑,之前写一个程序时,就是用这个函数,最后运行不出来,加载不出图片,我们先看下代码,以及我调试的结果:

if (flDlg.DoModal() == IDOK)
	{
		CString szText = flDlg.GetPathName();
		if (m_hBmp != NULL)
		{
			DeleteObject(m_hBmp);
			m_hBmp = NULL;
		}
		m_hBmp = (HBITMAP)LoadImage(NULL, szText, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
		if (m_hBmp)
		{
			HBITMAP hBmp = m_Image.SetBitmap(m_hBmp);
			if (hBmp)
			{
				DeleteObject(hBmp);
			}
		}
		CRect bmpRC,wndRC;
		m_ImagePanel.GetClientRect(wndRC);
		m_Image.GetClientRect(bmpRC);

		m_ImagePanel.OnHScroll(SB_LEFT, 1, NULL); 
		m_ImagePanel.OnVScroll(SB_LEFT, 1, NULL); 

		m_ImagePanel.SetScrollRange(SB_VERT, 0, bmpRC.Height()-wndRC.Height());
		m_ImagePanel.SetScrollRange(SB_HORZ, 0, bmpRC.Width()-wndRC.Width());
	}
主要的代码就是这个,可是最后就是运行不出来,我们看看:

我们来看看断点调试的图:


这是监视窗口的调试结果,我们可以看到,m_hBmp这个变量并没有值,在我查过了大量的资料后,发现,这个函数很不保险,而且函数参数较多,很容易出差错。我们看看fromfile函数:

if (flDlg.DoModal() == IDOK)
	{
		szText = flDlg.GetPathName();
		m_FileName.SetWindowText(szText);
		if (m_pBmp != NULL)
		{
			delete m_pBmp;
			m_pBmp = NULL;
		}
		m_pBmp = Bitmap::FromFile(szText.AllocSysString());
		Color bkClr(0, 0, 255);
		HBITMAP hBmp;
		m_pBmp->GetHBITMAP(bkClr, &hBmp);
		m_Image.SetBitmap(hBmp);
		szText.ReleaseBuffer();

		CRect bmpRC,wndRC;
		m_ImagePanel.GetClientRect(wndRC);
		m_Image.GetClientRect(bmpRC);

		m_ImagePanel.OnHScroll(SB_LEFT, 1, NULL); 
		m_ImagePanel.OnVScroll(SB_LEFT, 1, NULL); 

		m_ImagePanel.SetScrollRange(SB_VERT, 0, bmpRC.Height()-wndRC.Height());
		m_ImagePanel.SetScrollRange(SB_HORZ, 0, bmpRC.Width()-wndRC.Width());
	}

我们看看监视窗口的调试结果:

上面的图片告诉我们,这个函数运行成功,成功的引入了图片对象。
因此,在很多的情况下,我建议你们用fromfile这个函数,第一,操作方便;第二,很安全。