📄 使用gdi+编程.htm
字号:
border=0></CENTER><BR><BR>(5)可伸缩区域 Scalable Regions <BR>GDI+
在区域(regions)方面对GDI进行了改进,在GDI中,Regions存储在设备坐标中,对Regions
唯一可进行图形变换的操作就是对区域进行平移。而GDI+用世界坐标存储区域(Regions),允许对区域进行任何图形变换(譬如如图所示的缩放),图形变换以变换矩阵存储,下面例子是一个区域变换前后的例子(缩放、旋转、平移)
<BR><BR>
<CENTER><IMG src="使用GDI+编程.files/195.gif"
border=0></CENTER><BR><BR>(6)Alpha Blending(混合)
<BR>你可能会注意到上面显示的图形,红色未平移区域与变换后区域有一部分交叉区域,这一部分形成的梦幻效果就是由GDI+支持的Alpha
Blending(混合)实现的,利用alpha融合,你可以指定填充颜色的透明度,透明颜色与背景色相互融合,填充色越透明,背景色显示越清晰,下图所示的四个椭圆被填充了同样的颜色,但由于拥有不同的透明度而呈现不同的显示效果。
<BR><BR>
<CENTER><IMG src="使用GDI+编程.files/196.gif"
border=0></CENTER><BR><BR>(7)多种图像格式支持.
<BR>图像在图形界面程序中占有举足轻重的地位,GDI+除了支持BMP等GDI支持的图形格式外,还支持JPEG(Joint
Photographic Experts Group)、GIF(Graphics Interchange
Format)、PNG(Exchangeable Image File)、EXIF(Portable Network
Graphics)、TIFF(Tag Image File
Format)等图像格式,你可以直接在程序中使用这些图片文件,而无需考虑它们所用压缩算法。 <BR>(8)其它。
<BR>GDI+还将支持其它技术,譬如重新着色、颜色校正、元数据、图形容器,也许这些功能我们会在将来的WindowsXP或者Microsoft
VisualStudio。Net中看到. <BR>3.编程模式的改变 Device Contexts(设备描述表),
Handles(句柄), 和 Graphics Objects(图形对象)
<BR>如果你曾经使用过GDI编写过应用程序,你肯定对设备描述表(DC)的概念非常熟悉,设备描述表是Windows使用的一个数据结构,用于存储具体设备能力和与如何在设备上重绘一些项目的有关属性信息。而且视频设备的设备描述表还与特定的窗口有关。首先你必须获得一个设备描述表句柄,然后在图形绘制时,你把这个句柄作为一个参数传递给GDI图形绘制函数。当然你也可以把它传递给获得或设置设备描述表有关属性的函数。
<BR>利用GDI+函数,你不必使用句柄或者设备描述表。相反,你可以简单地创建一个图形对象(Graphics),然后以你熟悉的面向对象的编程方式调用它的方法即可,譬如myGraphicsObject.DrawLine(parameters)。Graphics对象是GDI+的核心,正如设备描述表是GDI的核心一样,设备描述表(DC)和图形对象(Graphics)在不同的环境下扮演着同样的角色,发挥着类似的作用,但是两者也存在着这质的不同。前者使用基于句柄的编程方法而后者使用面向对象的编程方法。
<BR>图形对象和设备对象一样,与屏幕的显示窗口有关,它包含着与项目重绘有关的属性信息(譬如平滑度),然而图形对象并没有像GDI那样与Pen(画笔)、Path(路径)、Image(图像)、Font(字体)等搅在一起。在GDI中,所有与绘图有关的绘图对象必须选入指定设备描述表中(使用SelectObject函数),才能被指定的设备描述表所使用。而在GDI+中,你只需把这些绘图对象作为一个参数传递给图形对象Graphics方法调用即可,每一个图形对象所使用的绘图工具至于它调用方法使用的参数有关,它可以通过参数使用多种Pen和Brush绘图,而不是与特定的笔和画刷联系在一起。
<BR>下面的代码分别用两种方法实现红线的绘制,其中线宽3,起点(20,10),终点(200,100) <BR>GDI
<BR>HDC hdc; <BR>PAINTSTRUCT ps; <BR>HPEN hPen; <BR>… <BR>hdc
= BeginPaint(hWnd, &ps); 获得设备句柄,开始绘制 <BR>hPen =
CreatePen(PS_SOLID, 3, RGB(255, 0, 0));创建红色画笔,宽3
<BR>SelectObject(hdc, hPen); 选入设备描述表 <BR>MoveToEx(hdc, 20, 10,
NULL); 画线 <BR>LineTo(hdc, 200, 100); <BR>EndPaint(hWnd,
&ps); 结束绘制 <BR>GDI+ <BR>HDC hdc; <BR>PAINTSTRUCT ps;
<BR>Pen* myPen; <BR>Graphics* myGraphics; <BR>… <BR>hdc =
BeginPaint(hWnd, &ps); <BR>myPen = new Pen(0xffff0000, 3);
创建一个笔,宽3,红色 <BR>myGraphics = new Graphics(hdc); 利用设备句柄创建图形对象
<BR>myGraphics->DrawLine(myPen, 20, 10, 200,
100);调用图形对象画线的方法 <BR>EndPaint(hWnd, &ps); <BR>四 如何使用GDI+
<BR>GDI+并不是Windows
XP的专利,它同样可以在其它Windows操作系统下使用(不包括Win3.X),包括64位的Windows版本,按照微软官方的话说,GDI+支持所有基于Windows的应用程序。你只要把GDIPlus.dll拷入Windows的系统目录,即可使用需要GDI+支持的应用程序。Microsoft
Visual C#全面支持GDI+,Microsoft Visual C++.net
<BR>使用GDI+有两种方法,一种方法是通过托管(managed
)的应用程序实现,另一种方法是在非托管项目中借助于调用C++面向对象类实现。 <BR>下面是一个基于Win32
SDK的窗口程序。使用要包含GDIplus.h头文件,连接设置要包含GdiPlus.lib库文件。 <BR>#define
UNICODE <BR>#include <BR>#include <BR>using namespace Gdiplus;
<BR><BR>void OnPaint(HWND hWnd) <BR>{ <BR>HDC hdc;
<BR>PAINTSTRUCT ps; <BR><BR>hdc = BeginPaint(hWnd, &ps);
<BR><BR>Graphics graphics(hdc); <BR>Pen pen(Color(255, 0, 0,
255)); <BR><BR>graphics.DrawLine(&pen, 0, 0, 200, 100);
<BR><BR>EndPaint(hWnd, &ps); <BR><BR>} // OnPaint
<BR><BR><BR>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,
LPARAM); <BR><BR>int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE, <BR>PSTR szCmdLine, int iCmdShow) <BR>{ <BR>HWND
hWnd; <BR>MSG msg; <BR>WNDCLASS wndClass;
<BR>GdiplusStartupInput gdiplusStartupInput; <BR>ULONG_PTR
gdiplusToken; <BR><BR>// GDI+ 初始化
<BR>GdiplusStartup(&gdiplusToken,
&gdiplusStartupInput, NULL); <BR><BR>wndClass.style =
CS_HREDRAW | CS_VREDRAW; <BR>wndClass.lpfnWndProc = WndProc;
<BR>wndClass.cbClsExtra = 0; <BR>wndClass.cbWndExtra = 0;
<BR>wndClass.hInstance = hInstance; <BR>wndClass.hIcon =
LoadIcon(NULL, IDI_APPLICATION); <BR>wndClass.hCursor =
LoadCursor(NULL, IDC_ARROW); <BR>wndClass.hbrBackground =
(HBRUSH)GetStockObject(WHITE_BRUSH); <BR>wndClass.lpszMenuName
= NULL; <BR>wndClass.lpszClassName = TEXT("GettingStarted");
<BR><BR>RegisterClass(&wndClass); <BR><BR>hWnd =
CreateWindow( <BR>TEXT("GettingStarted"), // window class name
<BR>TEXT("Getting Started"), // window caption
<BR>WS_OVERLAPPEDWINDOW, // window style <BR>CW_USEDEFAULT, //
initial x position <BR>CW_USEDEFAULT, // initial y position
<BR>CW_USEDEFAULT, // initial x size <BR>CW_USEDEFAULT, //
initial y size <BR>NULL, // parent window handle <BR>NULL, //
window menu handle <BR>hInstance, // program instance handle
<BR>NULL); // creation parameters <BR><BR>ShowWindow(hWnd,
iCmdShow); <BR>UpdateWindow(hWnd);
<BR><BR>while(GetMessage(&msg, NULL, 0, 0)) <BR>{
<BR>TranslateMessage(&msg); <BR>DispatchMessage(&msg);
<BR>} <BR><BR>GdiplusShutdown(gdiplusToken); 关闭GDI+
<BR><BR>return msg.wParam; <BR><BR>} // WinMain
<BR><BR><BR>LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
<BR>WPARAM wParam, LPARAM lParam) <BR>{ <BR>switch(message)
<BR>{ <BR>case WM_PAINT: <BR>OnPaint(hWnd); <BR>return 0;
<BR><BR>case WM_DESTROY: <BR>PostQuitMessage(0); <BR>return 0;
<BR><BR>default: <BR>return DefWindowProc(hWnd, message,
wParam, lParam); <BR>} <BR>} // WndProc
<BR><BR>综上所述,我们可以看出使用GDI+进行图形编程更容易,功能更强大,GDI+不仅是Microsoft
Visual
Studio.net的组成部分,也是WindowXP的重要组成部分,未来是GDI+的天下,GDI将逐渐退出历史舞台,这是大势所趋,不可逆转。早日锁定GDI+是你明智的选择。
<BR></TD></TR>
<TR>
<TD height=8></TD></TR>
<TR>
<TD>【本文共有<FONT color=#ffff00>0</FONT>条评论信息】</TD></TR>
<TR>
<TD>
<HR color=red SIZE=1>
</TD></TR>
<TR>
<TD align=right>【<A
href="http://www.czvc.com/review.asp?id=357#send">我来说两句</A>】 【<A
href="http://www.czvc.com/send.asp?id=357&type=1">推荐信息</A>】 【<A
href="javascript:window.print()">打印本页</A>】 【<A
href="javascript:window.close()">关闭窗口</A>】</TD></TR></TBODY></TABLE></TD>
<TD width="1%"> </TD></TR>
<TR>
<TD colSpan=3 height=8></TD></TR></TBODY></TABLE></TD>
<TD width=5 background=使用GDI+编程.files/back2.gif> </TD></TR></TBODY></TABLE>
<TABLE height=5 cellSpacing=0 cellPadding=0 width=759 align=center border=0>
<TBODY>
<TR>
<TD width="100%"
background=使用GDI+编程.files/back2.gif></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=8 width=759 align=center border=0>
<TBODY>
<TR>
<TD align=middle height=30>Copyright © <A
href="http://www.czvc.com/index.asp" target=_self><FONT
color=#ffff00>CZVC.com</FONT></A> 2002-2006 <A
href="mailto:info@czvc.com"><FONT color=#ffff00>一剑</FONT></A>
[QQ:28077188] All Rights
Reserved.<BR>本站由北京市通信公司提供网络支持</TD></TR></TBODY></TABLE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -