mfc中使用bmp和png位图

#include <GdiPlus.h>
#include <AtlImage.h>
#pragma comment(lib,"gdiplus.lib")  

//全局对象
CImage			m_Imagebmp;				//bmp图片
Image *			m_pImage;				//png图片


//全局函数


//绘画背景
VOID DrawViewImage(CDC * pDC, CImage & BitImage, BYTE cbDrawMode);
//绘画PNG图像
bool DrawImagePng(CDC * pDC, INT nXPos, INT nYPos);



//加载 bmp文件
m_Imagebmp.Load(TEXT("res\\bmp\\VIEW_BACK.bmp"));

//加载 png文件
CT2CW strFileName(TEXT("res\\png\\READY.png"));
m_pImage=Image::FromFile((LPCWSTR)strFileName);
//错误判断
if ((m_pImage==NULL)||(m_pImage->GetLastStatus()!=Ok)) 
{
	try { delete m_pImage; } catch (...) { ASSERT(FALSE); } m_pImage=NULL;
	return false;
}


//绘画界面
void CMyWindow::OnPaint()
{
	CPaintDC dc(this);
	DrawViewImage(&dc,m_Imagebmp,DRAW_MODE_CENTENT);
	DrawImagePng(&dc,0,100);
}


//绘画模式
#define DRAW_MODE_SPREAD   0         //平铺模式
#define DRAW_MODE_CENTENT   1         //居中模式
#define DRAW_MODE_ELONGGATE   2         //拉伸模式
//绘画模式
#define DRAW_MODE_SPREAD   0         //平铺模式
#define DRAW_MODE_CENTENT   1         //居中模式
#define DRAW_MODE_ELONGGATE   2         //拉伸模式

//绘画背景
VOID CMyWindow::DrawViewImage( CDC * pDC, CImage & BitImage, BYTE cbDrawMode )
{
	//获取位置
	CRect rcClient;
	GetClientRect(&rcClient);

	//无效区域
	CRect rcDirty;
	pDC->GetClipBox(&rcDirty);

	//绘画位图
	switch (cbDrawMode)
	{
	case DRAW_MODE_SPREAD:		//平铺模式
		{
			//加载资源
			INT nImageWidth=BitImage.GetWidth();
			INT nImageHeight=BitImage.GetHeight();

			//绘画位图
			for (INT nXPos=0;nXPos<rcClient.right;nXPos+=nImageWidth)
			{
				for (INT nYPos=0;nYPos<rcClient.bottom;nYPos+=nImageHeight)
				{
					BitImage.BitBlt(pDC->m_hDC,nXPos,nYPos);
				}
			}

			return;
		}
	case DRAW_MODE_CENTENT:		//居中模式
		{
			//变量定义
			INT nImageWidth=BitImage.GetWidth();
			INT nImageHeight=BitImage.GetHeight();

			//位置计算
			INT nXPos=(rcClient.Width()-BitImage.GetWidth())/2;
			INT nYPos=(rcClient.Height()-BitImage.GetHeight())/2;

			//绘画位图
			BitImage.BitBlt(pDC->m_hDC,nXPos,nYPos);

			return;
		}
	case DRAW_MODE_ELONGGATE:	//拉伸模式
		{
			//变量定义
			INT nImageWidth=BitImage.GetWidth();
			INT nImageHeight=BitImage.GetHeight();

			//绘画位图
			BitImage.StretchBlt(pDC->m_hDC,0,0,rcClient.Width(),rcClient.Height(),0,0,nImageWidth,nImageHeight);

			return;
		}
	}

	return;
}

//绘画图像
bool CMyWindow::DrawImagePng( CDC * pDC, INT nXPos, INT nYPos )
{
	//加载判断
	ASSERT(m_pImage!=NULL);
	if (m_pImage==NULL) return false;

	//创建屏幕
	ASSERT(pDC!=NULL);
	Graphics graphics(pDC->GetSafeHdc());

	//获取属性
	INT nImageWidth=m_pImage->GetWidth();
	INT nImageHeight=m_pImage->GetHeight();

	//构造位置
	RectF rcDrawRect;
	rcDrawRect.X=(REAL)nXPos;
	rcDrawRect.Y=(REAL)nYPos;
	rcDrawRect.Width=(REAL)nImageWidth;
	rcDrawRect.Height=(REAL)nImageHeight;

	//绘画图像
	graphics.DrawImage(m_pImage,rcDrawRect,0,0,(REAL)nImageWidth,(REAL)nImageHeight,UnitPixel);

	return true;
}


 

	//GDI+初始化
	GdiplusStartupInput m_GdiplusStartupInput;
	ULONG_PTR m_GdiplusToken;
	ULONG_PTR token=GdiplusStartup(&m_GdiplusToken, &m_GdiplusStartupInput, NULL);

	//清除使用
	GdiplusShutdown(token); 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值