c++ mfc加载图片jpg,png,GIF格式

使用c++ SDK中的类(Graphics,Image)加载图片

c++, mfc加载图片jpg,png,gif格式

前言

使用gdi+类加载图片(jpg,png,gif)

(定义两个变量:GdiplusStartupInput param1; ULONG_PTR param2;)
需要先在构造函数初始化库:调用GdiplusStartup(&param1,&param2,NULL); 对应析构函数 GdiplusShutdown(param2);

提示:以下是本篇文章正文内容,下面案例可供参考

1 可以用以下示例中自定义的函数LoadImageFromResource()从资源文件中加载一张图片,构造出一个Image(也可以从文件中加载;使用Image::FromFile); 然后使用Graphics类绘制:

Graphics graph(CDC* ); //需要传入一个设备CDC
graph.DrawImage(); //参数省略参考MSDN说明文档(可以在指定位置绘制指定大小和指定图片区域的图片)。

2 对于Bitmap(位图) 和ico(图标)类型图片,无法使用以上方法
对于ico 可以使用以下方法
HICON hIcon;
hIcon = (HICON)::LoadImage(::AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON),IMAGE_ICON,128,128,0);
Bitmap pBitmap = Bitmap::FromHICON(hIcon);

IDI_ICON为图标资源ID
::LoadImage函数可以加载自定义大小的图标,然后构造Gdiplus类中的Bitmap对象(继承自Image)
再使用 Graphics::DrawImage 绘制出来

3 对于Bitmap位图可以使用CImage类,操作更简单:
使用CImage中的LoadFromResource(HINSTANCE hInstance, UINT nIDResource);(只能加载位图)
然后使用CImage::Draw()绘制 //参数省略参考MSDN说明文档

4.对于Gif图片可以使用Image类中的函数(详细见代码示例)

二、使用步骤

1.引入库

代码如下(示例):

Image* LoadImageFromResource( int nID,LPCTSTR pStrType )
{
	Image *pImage = NULL;
	char	 *m_pAllocBuffer  = NULL;				//最好定义成全局变量
	HMODULE hMoudle = GetModuleHandle(NULL);
	HRSRC hRsc = ::FindResource(hMoudle ,MAKEINTRESOURCE(nID),pStrType);
	
	if (hRsc)
	{
		DWORD dwSize    = ::SizeofResource(hMoudle,hRsc);
		HGLOBAL hGloble = ::LoadResource(hMoudle,hRsc);
		char *pResource	= (char*)::LockResource(hGloble);
		m_pAllocBuffer = (char*)::GlobalAlloc(GPTR,dwSize);
		memcpy(m_pAllocBuffer,pResource,dwSize);
		IStream *pStream = NULL;
		CreateStreamOnHGlobal(m_pAllocBuffer,TRUE,&pStream);
		if (pStream)
		{
		    pImage = Image::FromStream(pStream);
		}
		pStream->Release();
		FreeResource(hRsc);
	}
	return pImage;
}

绘制Gif方法如下:

//定义一个类
class CDrawGifImage
{
public:
	CDrawGifImage();
	~CDrawGifImage(void);
	
void LoadGifImage();			//初始化
void DrawGifImage(CDC* pDc);		//绘制函数
private:
	Image	*m_pGifImage;		Gif
	GUID	*m_pGuid;			//每一帧数据
	int	 	m_nFrameCount;		//帧总数量
	int	 	m_nIndex;		//当前帧下标
	char*	 m_pAllocBuffer;		//动态分配的Buff
};

//类实现:
void CDrawGifImage::LoadGifImage()
{
	m_pGifImage = new Image("gif图片路径");  //也可以从资源文件加载
	int DimensionsCount = m_pGifImage->GetFrameDimensionsCount();	  //获取维度
	m_pGuid = new GUID[DimensionsCount];
	m_pGifImage->GetFrameDimensionsList(m_pGuid,DimensionsCount );	//获取所有帧数据
	m_nFrameCount = m_pGifImage->GetFrameCount(m_pGuid);		//获取gif帧数
	m_nIndex = 0;
}

//绘制Gif
void CDrawGifImage::DrawGifImage(CDC* pDc)
{
	CBitmap bitmap;
	CDC *pMemDc = new CDC;
	pMemDc->CreateCompatibleDC(pDc);	
	bitmap.CreateCompatibleBitmap(pDc,m_prcDraw->Width(),m_prcDraw->Height());
	pMemDc->SelectObject(&bitmap);	//	构建内存DC防止闪烁
	//开始绘制
	Graphics graphc(pMemDc->m_hDC);
	graphc.DrawImage(m_pGifImage);	//(省略了部分参数 参考MSDN文档)
	pDc->BitBlt();			//(省略了部分参数 参考MSDN文档)	
	m_pBkImage->SelectActiveFrame(m_pGuid,m_nIndex++);	//选择下一帧
	if (m_nIndex == m_nFrameCount)
	{
		m_nIndex = 0;
	}
	delete pMemDc;
	//要在一个定时器中调用此函数,不停的绘制(以上方法仅供参考)
}

总结

以上方法仅供参考

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 MFC 中显示 jpg 图片可以通过以下步骤实现: 首先,需要在 MFC 应用程序中添加一个 Picture Control 控件,用于显示图片。 接下来,需要导入相关的头文件,包括 "afx.h" 和 "afxwin.h"。 然后,在应用程序的消息映射中,添加一个响应 Picture Control 控件更新消息的处理函数。 在该处理函数中,可以使用 MFC 提供的 CImage 类来加载和显示 jpg 图片。可以使用 CImage 的 Load() 函数加载指定路径的 jpg 图片。例如,可以使用类似下面的代码加载图片: CImage image; image.Load(_T("路径/图片名.jpg")); 然后,可以使用 Picture Control 控件的 SetBitmap() 函数将加载图片设置为要显示的位图。例如,可以使用下面的代码将图片设置为 Picture Control 控件的位图: m_pictureControl.SetBitmap(image.Detach()); 最后,应该确保在程序退出时,释放图片资源,可以在析构函数或销毁 Picture Control 控件的处理函数中调用 CImage 的 Destroy() 函数释放图片资源: image.Destroy(); 通过以上步骤,就可以在 MFC 应用程序中成功显示 jpg 图片了。 ### 回答2: 在MFC中显示JPG图片需要使用GDI+库。 首先,需要添加GDI+的头文件和库文件: ``` #include <gdiplus.h> #pragma comment(lib,"gdiplus.lib") using namespace Gdiplus; ``` 然后,在MFC的窗口类中重写OnPaint函数用于绘制图片: ``` void CYourWndClass::OnPaint() { CPaintDC dc(this); GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); Graphics graphics(dc.GetSafeHdc()); Image image(L"your_image.jpg"); // 替换为图片路径和名称 graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight()); GdiplusShutdown(gdiplusToken); } ``` 上述代码中,使用`Image`类加载JPG图片,并使用`Graphics`类的`DrawImage`函数将图片绘制到窗口上。 最后,在窗口的初始化函数(如OnInitDialog)中调用Invalidate函数来触发窗口的重绘: ``` BOOL CYourWndClass::OnInitDialog() { CDialog::OnInitDialog(); Invalidate(); return TRUE; } ``` 以上就是使用MFC显示JPG图片的基本步骤。如果想要在其他控件中显示图片,可以在对应的控件绘制函数中使用相同的方法来绘制图片。 ### 回答3: 在MFC中,我们可以使用CImage类来显示jpg图片。 首先,需要在程序中引入相关的头文件和库,包括atlimage.h和comdef.h。 然后,我们可以创建一个CImage对象,并调用其Load函数加载jpg图片文件。例如,假设我们有一个名为image.jpgjpg图片文件,可以使用以下代码加载图片: CImage image; image.Load(_T("image.jpg")); 接下来,我们需要将CImage对象中的图片绘制到显示窗口上。可以使用CDC类的相关函数来实现绘制操作。 首先,需要获取显示窗口的CDC对象。一种常见的方法是在窗口类中重写OnPaint函数,然后在该函数中获取CDC对象。例如: void CMyWindow::OnPaint() { CPaintDC dc(this); // 获取窗口的DC对象 // 在这里进行绘制操作 } 然后,在获取到CDC对象后,可以使用CDC的相关函数来绘制CImage对象中的图片。例如,可以使用CDC的BitBlt函数来实现简单的绘制操作。以下是一个示例代码: void CMyWindow::OnPaint() { CPaintDC dc(this); // 获取窗口的DC对象 // 绘制CImage对象中的图片 int width = image.GetWidth(); int height = image.GetHeight(); image.BitBlt(dc.GetSafeHdc(), 0, 0, width, height, 0, 0, SRCCOPY); } 在上述示例代码中,我们首先获取了CImage对象的宽度和高度,并使用CDC的BitBlt函数将CImage对象中的图片绘制到窗口的DC对象上。 以上是一种简单的在MFC中显示jpg图片的方法。当然,还有其他多种方式可以实现此功能,具体的方法可以根据实际需求进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值