首页 > 其他分享 >GDIplus的初次接触--加载并显示常用格式图片

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

时间:2022-12-07 16:01:21浏览次数:44  
标签:gdiplusToken Gdiplus -- Image pBtn GDIplus pImage NULL 加载


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

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

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


#include <GdiPlus.h>
//#include <AtlImage.h> //此头文件里面包括#pragma comment(lib, "gdiplus.lib")
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;



二、初始化Gdiplus

Gdiplus::GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_gdiplusToken;
GdiplusStartup( &m_gdiplusToken, &m_gdiplusStartupInput, NULL );




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

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;
}





四、绘制图片

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




五、关闭Gdiplus

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 );
}





二、运行界面 


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

标签:gdiplusToken,Gdiplus,--,Image,pBtn,GDIplus,pImage,NULL,加载
From: https://blog.51cto.com/u_15905375/5919635

相关文章

  • 操作系统:银行家算法(避免死锁)
    算法介绍:程序实现:/*****************************************************程序:银行家算法实现作者:小单时间:2013年11月5日***************************......
  • 解决vscode中在js文件中报ts检测提示
    1.遇到的问题vscode中在js文件中报ts检测语法提示2.解决方法在设置中查找validate找到Typescript设置,将JavaScript>Validate:enable设置为禁用,或者在setti......
  • MPLS-VPN虚拟专用网络组网的规划与实现
    信息时代的到来,数据通信技术得以应用于大规模的商业活动。当前主流的数据通信组网方式包括:专线 组网、互联网虚拟专用网络VPN组网等。专线组网主要是通过同步数字传......
  • 读写分离
    读写分离读写分离需要保证两个数据库数据一致,需要用到MySQL的主从复制:主从复制:https://www.cnblogs.com/mynode/p/16955825.html面对日益增加的系统访问量,数据......
  • 非模态对话框的创建及使用
    在开始本文之前,假设我已经派生了一个对话框类CMyDlg。对于模态对话框,使用非常简单,通常会像以下这样使用:voidFun(){.....................
  • 新功能发布 | TSMaster新增CANoe自动化控制模块,欢迎下载体验!
    前言今天介绍TSMaster的新功能—CANoe自动化模块。该模块的功能是通过激励CANoe内部的系统变量,配合运行在CANoe中的CAPL脚本来响应变量变化事件,从而实现对CANoe的自动控制。......
  • 精美的web前端源码的特效
    1.JS自定义烟花特效这是一款基于JS和Canvas的自定义烟花特效,初始化界面的时候特效是不带声效的绽放,当你点击顶部中间的播放,即可以看到美丽的烟火也可以听到烟花绽放的声音......
  • 在Excel中,如何将超出单元格的文字自动隐藏;;excel行序号不连续
    excel行号不连续的原因,并给出相应的行号不连续的解决方法_office教程网(office26.com) 自行搜索,标题就是搜索关键词......
  • Oracle备份方式
    数据库备份与恢复命令导出/导入(Export/Import);冷备份;热备份;rman数据备份与恢复命令导入导出imp/exp冷备份冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提......
  • 【AutoCAD .NET】不同Database之间拷贝实体
    官方代码例子https://forums.autodesk.com/t5/net/copy-model-space-to-another-database/m-p/9735648usingAutodesk.AutoCAD.Runtime;usingAutodesk.AutoCAD.Applic......