GDI+ 之环境配置

来源:互联网 发布:电脑主题软件排行 编辑:程序博客网 时间:2024/05/16 01:55

        Microsoft Windows GDI+ 是一个在 C/C++ 中使用的基于类的图形设备编程接口。它使应用程序 能 在视频显示和打印机 上 使用图形和格式化文本 。那些基于 Microsoft Win32 API 的应用程序不能直接访问图形硬件,相反,GDI+ 则可以代表应用程序同设备驱动程序相互作用。同时,GDI+也支持 Microsoft Win64 。

一、GDI+环境配置

1、GDI+运行环境

GDI+ 可以在所有基于 Windows 的应用程序中使用。 GDI+ 是包含在 Windows XP 和Windows Server 2003 中的新技术。 GDI+ 在 Microsoft Windows NT 4.0 SP6 、 Windows
2000 、 Windows 98 , Windows Me 操作系统 上 作为 应用程序运行 时 , 必需 安装 一个可再发行 的GDI+ 组件。gdiplus.dll 为支持 GDI+ 的动态链接库 , 在 Windows XP 及以后的操作系统中都已包含有这个 文档。 倘 若是需要在低于 Windows XP 操作系统中 , 来运行包含有 GDI+ 的应用程序的话, 则这些操作系统上必须要有 gdiplus.dll 这个文档。

2、GDI+开发环境

从 Microsoft Visual Studio 2003 版本起,可以 已包含有对 GDI+ DSK 的支持 。但 在VC++6.0 中却还需要使用者 来 手动配置 , 使之支持对 GDI+ DSK 的引用 。 这首先必须获取 GDI+for VC6.0 SDK 开发包 (可以从网上获取) 。解压后得到GDIPlus文件夹,在该文件夹下有三类文档,即:1、Include 文件夹,其中包含有多个 *. H 文件 2、lib 文件夹其中包含有 GdiPlus.lib 3、gdiplus.dll,gdiplus.dll 文档在上面已经讲过,运行包含 GDI+ 的应用程序操作系统中必须有该文档。

而在 VC++ 6.0 中主要就是针对 Include 文件夹和 lib 文件夹进行环境配置 , 使其支持对 GDI+ 文档的引用 。打开 VC++ 6.0 程序窗口进行如下设置。

1 、配置 GDI+ 包含文件路径

首先将GDIPlus文件夹放到VC安装目录VC98文件夹下

将 GDI+ DSK 中 的 Include 文件夹 路径信息, 添加到 Visual C++6.0 中。在 VC++ 6.0 窗口中操作步骤如下:

2 、配置 GDI+ 静态库文件路径
将 GDI+ 下的 LIB 文件夹 添加到 Visual C++6.0 中。在 VC++ 6.0 窗口中操作步骤如下:

对于 GDI+ 的 GdiPlus.lib 文件只是进行上述配置是不够的,当 VC++ 6.0 调用 LINK .EX E编译工具进行连接生成 EXE 文件时 , 由于连接器找不到 GdiPlus.lib 文档还是会出错 。因此 ,对 于GdiPlus.lib 文档还需进行下面的设置操作。

3、链接 GDI+ GdiPlus.lib

若要使 G diPlus.lib 文档在编译时能正常链接, 解决的办法 有两种 :
◆ 其一是在 VC++ 6.0 窗口中设置。
若 G diPlus.lib 文档已包含在编译器环境变量所指定的目录中 ( 上述操作所致 ) , 则 在 VC++6.0窗口选择菜单【 project 】 → 【 settings … 】,打开 “ project settings ” 对话框窗口并选择【 L ink 】属性页,在该页面上的 ” Category ” 项目旁的下拉框内选择 ” General ” 项目,之后在下面 ” object/library modules ” 编辑框中输入 G diPlus.lib 文件名即可。而 若 G diPlus.lib 文档 还 未包含在编译器环境变量所指定的目录中,则在上述设置基础上,还需在 【 L ink 】属性页面上的 ” Category ” 项目旁的下拉框内选择 ” Input ” 项目,之后在下面的 ”Additional library path ” 编辑框内输入 G diPlus.lib 文件的绝对路径。
◆ 其二是在应用程序代码中设置。
若 G diPlus.lib 文档未包含在编译器环境变量所指定的目录中,可在程序代码的头文件中设置下列语句:
#pragma comment(lib, "d:\\Program Files\\VC98\\al\\GdiPlus.lib"),双引号内为 GdiPlus.lib 文档的绝对路径,注意,文件路径中的斜杠为双斜杠。
若 G diPlus.lib 文档已包含在编译器环境变量所指定的目录中,可在程序代码的头文件中设置下列语句:
#pragma comment(lib, "GdiPlus.lib") 只要 GdiPlus.lib 文件名即可。

二、 GDI+ 初始化

编写具 有 GDI+ 接口的应用程序 , 在其源代码中都有固定的初 始 GDI+ 接口的程式 。 在 VC++6.0 中对 GDI+ 的初始化时,在 MFC 应用程序与 API 应用程序中是有所不同的。
MFC 程序指的是 C/C++ 语言以 MFC 类库为基础的应用程序。
1 、 在StdAfx.h 声明

#define UNICODE
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long // 声明变量
#endif
#include < gdiplus.h  >
using namespace Gdiplus  ; // 利用命名空间
#pragma comment(lib, "gdiplus.lib")

2  、定义CMyApp类成员变量
class CMyApp : public CWinApp
{

    public:
CMyApp();
ULONG_PTR m_gdiplusToken ; // 定义变量
... ...
virtual int ExitInstance();
… …
}

3 、 CMyApp::InitInstance()

在该函数的适当位置添加下列语句 。注 意 :一定要添加在m_pMainWnd->ShowWindow(SW_SHOW ) 语句 之前。
BOOL CALmfcApp::InitInstance()
{
... ...
// 定义结构变量
GdiplusStartupInput gdiplusStartupInput;
// 初始化 GDI+ ,必须在显示窗口语句之前调用
GdiplusStartup(&m_gdiplusToken,&gdiplusStartupInput, NULL) ;
… …
m_pMainWnd->ShowWindow(SW_SHOW ) ; // 显示窗口
}

4、 CMyApp::ExitInstance()

重载 CMyApp 类的函数 CMyApp::ExitInstance() 并加入如下语句 :
int CALmfcApp::ExitInstance()
{
// 清理 GDI+ 使用过的资源
GdiplusShutdown(m_gdiplusToken);
return TRUE;
}

 

三 GDI+ 使用示例

1、画线

void C My View::OnDraw(CDC* pDC)
{
CALmfcDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: 添加绘制代码
Graphics graphics(pDC->m_hDC);
Pen pen(Color(255 255, 0, 255),5);
 graphics.DrawLine(&pen,20, 20,  200, 100);
}
其中:
Graphics graphics(pDC->m_hDC)
Graphics 类为 GDI+ 对象,提供绘制直线,曲线,图表, 图像和文字的方法。该语句创建一个与指定设备环境( DC )相关联的 Graphics 对象。
Pen pen(Color( 255 , 255, 0, 255), 5)
Pen 类为 GDI+ 对象, 用于绘制直线和曲线 的画笔工具。该语句为 pen 指定线段的颜色和宽度。其中颜色值包含 不透明度 , 红色 , 绿色和蓝色四种分量。线段的宽度为 5 ,单位是像素。
graphics.DrawLine(&pen, 20, 20, 200, 100)

DrawLine 为 graphics 类的成员函数, 将 画出点 (20,20) 与点 (200,100) 之间的线段。

2、利用 GDI+中的函数在对话框中显示图像
①在整个对话框的客户区域中显示图像
去掉对话框中所有的控件,在其重绘函数 OnPaint()中添加:
 
Image image(L"D:\\1.jpg"); //载入指定路径的图像文件
//jpg 或bmp格式的都可以 路径前面的 L不能少
CDC* dc=GetDC(); //获取设备上下文
CRect rect;
GetClientRect(&rect); //获取客户区域的信息
Graphics graph(dc->GetSafeHdc());
graph.DrawImage(&image,0,0,rect.Width(),rect.Height()); //在客户区域中绘制
// 函数 DrawImage()的第1 个参数为存放图像数据的内存地址 
// 第2 个参数和第 3 个参数是绘制的起点坐标
// 第4 个参数和第 5 个参数是指定的宽度和高度
ReleaseDC(dc); //释放资源
 
编译运行即可.如下图所示:

②在图像控件中显示图像
在对话框中添加一个图像控件,其 ID 设置为 IDC_IMAGE.添加一个按钮控件,添加该按钮控件的消息响
应函数:
 
Image image(L"D:\\1.jpg"); //载入指定路径的图像文件
//jpg 或bmp格式的都可以 路径前面的 L不能少
CWnd* pwnd=GetDlgItem(IDC_IMAGE);//IDC_IMAGE 为图像控件的 ID
CDC* dc=pwnd->GetDC(); //获取图像控件的设备上下文
CRect rect;
pwnd->GetClientRect(&rect); //获取客户区域的信息
Graphics graph(dc->GetSafeHdc());
graph.DrawImage(&image,0,0,rect.Width(),rect.Height()); //在指定图像控件的区域中绘制图像
// 函数 DrawImage()的第1 个参数为存放图像数据的内存地址 
// 第2 个参数和第 3 个参数是绘制的起点坐标
// 第4 个参数和第 5 个参数是指定的宽度和高度
ReleaseDC(dc); //释放资源

编译运行即可.如下图所示:

3  在 VC++6.0 单文档工程中利用 GDI+显示图像的方法
在相关的 View类中的函数 OnDraw(CDC* pDC)中,添加:
 
Image image(L"D:\\1.jpg"); //载入指定路径的图像文件
//jpg 或bmp格式的都可以 路径前面的 L不能少
CRect rect;
GetClientRect(&rect); //获取客户区域的信息
Graphics graph(pDC->GetSafeHdc());//pDC 就是函数OnDraw()中的参数
graph.DrawImage(&image,0,0,rect.Width(),rect.Height()); //在客户区域中绘制图像
// 函数 DrawImage()的第1 个参数为存放图像数据的内存地址 
// 第2 个参数和第 3 个参数是绘制的起点坐标
// 第4 个参数和第 5 个参数是指定的宽度和高度

编译运行即可.如下图所示

 

原创粉丝点击