GDIplus的初次接触--加载并显示常用格式图片

在没有接触Gdiplus之前,在vc中绘制图片,通常加载一张位图,然后进行贴图。对于现在多种多样的图片格式,之前的GDI并不支持(应该是这样的,呵呵)。而使用Gdiplus则可以选择多种图片格式,比如BMP, ICON, GIF, JPEG, Exif, PNG, TIFF, WMF, and EMF。

下面就介绍下首次接触Gdiplus的一个简单应用。

一、包括相应的头文件及引入相应的lib

<span style="white-space:pre">	</span>#include <GdiPlus.h>
        //#include <AtlImage.h> //此头文件里面包括#pragma comment(lib, "gdiplus.lib")
        #pragma comment(lib, "gdiplus.lib")
        using namespace Gdiplus; 

二、初始化Gdiplus

<span style="white-space:pre">	</span>Gdiplus::GdiplusStartupInput	m_gdiplusStartupInput;
	ULONG_PTR				m_gdiplusToken;
        GdiplusStartup( &m_gdiplusToken, &m_gdiplusStartupInput, NULL ); 

三、加载相应的资源(此处为图片)

 <span style="white-space:pre">	</span>Image*		m_pImage;							//图片对象
        m_pImage=Image::FromFile(_T("Test03.jpg"));

	//错误判断
	if ((m_pImage==NULL)||(m_pImage->GetLastStatus()!=Ok))
	{
		if ( m_pImage )
		{
			delete m_pImage;
			m_pImage = NULL;
		}
		return FALSE;
	} 

四、绘制图片

<span style="white-space:pre">	</span>Graphics graphics( GetDC()->GetSafeHdc() );
 	graphics.DrawImage(m_pImage, 0,0,m_pImage->GetWidth(),m_pImage->GetWidth());

五、关闭Gdiplus

 <span style="white-space:pre">	</span>GdiplusShutdown( m_gdiplusToken );

以下是显示一个jpg格式的例子(基于对话框的一个程序)

一、主要代码

 //变量声明
        Gdiplus::GdiplusStartupInput	m_gdiplusStartupInput;
	ULONG_PTR						m_gdiplusToken;
	Image*							m_pImage;							//图片对象

    //初始化
    BOOL Cmfc12_30Dlg::OnInitDialog()
    {
	..................................................

	// TODO: 在此添加额外的初始化代码
	//初始化GDI+.
	GdiplusStartup( &m_gdiplusToken, &m_gdiplusStartupInput, NULL );

	//加载文件
	//CT2CW strFileName( _T("I:\\编程练习\\CommonFiles\\Test02.png") );
	//m_pImage = new Image( _T("I:\\编程练习\\CommonFiles\\Test02.png") );
	//m_pImage=Image::FromFile(_T("I:\\编程练习\\CommonFiles\\Test02.png"));
	m_pImage=Image::FromFile(_T("I:\\编程练习\\CommonFiles\\Test03.jpg"));

	//错误判断
	if ((m_pImage==NULL)||(m_pImage->GetLastStatus()!=Ok))
	{
		if ( m_pImage )
		{
			delete m_pImage;
			m_pImage = NULL;
		}
		return FALSE;
	}

	MoveWindow( 0, 0, 1024, 768 );

	//设置按钮位置
	CWnd* pBtn = GetDlgItem( IDOK );
	if ( pBtn )
	{
		pBtn->MoveWindow( 1024-160, 700, 60, 30 );
	}
	pBtn = GetDlgItem( IDCANCEL );
	if( pBtn )
	{
		pBtn->MoveWindow( 1024-80, 700, 60, 30 );
	}
	CenterWindow();

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    } 

    //绘制
    void Cmfc12_30Dlg::OnPaint()
    {
	............................................................

	//GetDC()->PatBlt( 0, 0, 500, 500, BLACKNESS );
	//PatBlt( GetDC()->GetSafeHdc(), 0, 0, 500, 500, BLACKNESS );

 	Graphics graphics( GetDC()->GetSafeHdc() );
 	graphics.DrawImage(m_pImage, 0,0,m_pImage->GetWidth(),m_pImage->GetWidth());
    }

    //关闭
    void Cmfc12_30Dlg::OnDestroy()
    {
	CDialog::OnDestroy();

	// TODO: 在此处添加消息处理程序代码
	if( m_pImage )
	{
		try
		{
			delete m_pImage;
		}
		catch (...)
		{

		}
		m_pImage = NULL;
	}

	GdiplusShutdown( m_gdiplusToken );
    } 

二、运行界面

时间: 2024-08-03 14:39:29

GDIplus的初次接触--加载并显示常用格式图片的相关文章

从代码分析Android-Universal-Image-Loader的图片加载、显示流程

从UNIVERSAL IMAGE LOADER. PART 3(四个DisplayImage重载方法详解)中,我们学习了Android-Universal-Image-Loader(以下简称UIL)中四个DisplayImage重载方法的使用,如果你还没有学习,最好先返回去看看,不然可能不理解这篇文章.在这篇文章中我们将主要探讨Android-Universal-Image-Loader的主要流程和这些流程相关的类的分析. 我们先了解一下UIL加载图片的流程(可以通过查看ImageLoader.

IOS嵌套界面下 -UIWebView加载网页显示不全(尺寸适应问题)

最近有个朋友碰到一个关于在嵌套界面下UIWebView加载网页显示不全的问题 咋一看这种问题太easy了.但是不要忽视其背后的真正黑手,现在拿百度首页做个实验(百度就是这点好)先贴上一小段核心代码: 显示效果: 看到没 显示不全.现在你会说快用大招: 解决它.可惜这招也不行. 原因分析:为什么会显示不全呢? 主要问题就出在前面说的关于在嵌套界面下. 可为什么在嵌套界面下就不行呢? 显示不全是个问题. 是的 是个问题而且是个显示界面尺寸不匹配的问题.可在主界面就这可以, 而且frame我都是用的s

js图片未加载完显示loading效果

<html> <title>js图片未加载完显示loading效果</title> <body> <style> img{float:left;width:200px;height:200px;margin:0 10px 10px 0} </style> <script> //判断浏览器 var Browser=new Object(); Browser.userAgent=window.navigator.userAge

lufylegend:图片的加载和显示

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <script type="text/javascript" src="../lufylegend-1.7.6.min.js"></script> </head> <body> <div id="mylegend"&g

js 利用 ajax 加载 js ,显示加载进度 ,严格按照js的顺序先后加载到页面

js 利用 ajax 加载 js ,显示加载进度 ,严格按照js的顺序先后加载到页面 , 做手机端开发时,发现一个问题,有些浏览器,在网速比较慢的情况下,js文件没有加载完,后续的调用已经开始调用了,导致出错.后来使用此法,保证了任何时候都完全是按照js的先后顺序执行的. 源码: /** * js 利用 ajax 加载 js ,显示加载进度 ,严格按照js的顺序先后加载到页面 * 原理:利用 ajax 异步多线程快速加载, 每个文件加载完成后存入到加载完成数组中, * 显示到页面时完全按传入的顺

【JavaScript】加载失败的红叉图片处理与&lt;img&gt;图片标签的onerror事件

大家上网的时候肯定见到过加载失败的红叉图片,具体如下图.当然现在Google Chrome与Firefox对其处理会好看一些. 其实可以利用<img>图片标签的onerror事件对其处理的,要求其加载失败之后,马上加载一张默认图片,而不是显示为红叉叉. 其代码如下: <img src="s.png" onerror="javascript:this.src='xx.png';this.width=80;this.height=80;" />

快速加载DXF、DWG格式文件控件ABViewer

ABViewer是一种高品质,低成本,高效率的多功能设计及工程文档管理应用程序. ABViewer为您提供专业的cad文件浏览和编辑工具. 支持多种格式,如:DWG格式, DXF, DWF, Hewlett-Packard HPGL, PLT, HGL, CGM, SVG, TIFF, BMP, JPG, GIF etc 等. 具体功能: ABViewer它可以方便我们在下述几种情况下大大节省时间: 当您需要在您的MS Word 文档中导入CAD图像时 您可以获得比常规软件快两倍的CAD文件(D

Android ListView只加载当前屏幕内的图片(解决list滑动时加载卡顿)

最近在做ListView分页显示,其中包括图片 和文字(先下载解析文字内容,再异步加载图片)发现每次点击下一页后,文字内容加载完毕,马上向下滑动,由于这时后台在用线程池异步下载图片,我每页有20条,也就是20张图片,会导致listview滑动卡顿! 这是用户不想看到的,我参考了网易新闻和电子市场等应用,发现它们都是只加载屏幕内的图片,不现实的不加载,于是我也仿照做了一个.我是菜鸟,我承认 呵呵,虽然不见得完全和他们的一样,但是确实解决了翻页时那一刻的卡顿现象. 因为未发现网上有相关文章,希望对朋

jquery文档加载几种写法,图片加载写法

jquery文档加载写法: $(function(){ }) ; //个人最常使用方式 $(document).ready(function(){ }); //调用文档对象下的ready方法传入一个函数. $(window).load(function() { });//调用window对象下的load方法传入一个函数. (function() { })(jQuery)//()()表示立即执行 并且传入jquery = $ 所以之前$也可以替换为jQuery 注意: jquery的ready只是