频道直达:新闻 - 组网 - 安全 - 服务器 - 存储 - 系统 - 应用 - 开发 - 数据库 - 前沿 - 技术人 - 培训 - 求职 - 读书 - 教程 - 专题 - 产品 - 案例 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

C# GDI+编程之基础篇(1)

作者: 朱先忠 出处:IT168 2007-02-26 09:17    砖    好    评论   进入论坛
阅读提示:本文先简单介绍了GDI+的工作机理,然后说明了图像操作中的缩略图,缩放与保存,以及在实际开发中的图像操作。这些仅是.NET C#环境下关于GDI+编程的一些基本的实用操作片断。供大家参考!

一、关于GDI+

从本质上来看,GDI+为开发者提供了一组实现与各种设备(例如监视器,打印机及其它具有图形化能力但不及涉及这些图形细节的设备)进行交互的库函数。GDI+的本质在于,它能够替代开发人员实现与例如显示器及其它外设的交互;而从开发者角度来看,要实现与这些设备的直接交互却是一项艰巨的任务。

下图1展示了GDI+在开发人员与上述设备之间起着重要的中介作用。其中,GDI+为我们“包办”了几乎一切—从把一个简单的字符串“HelloWorld”打印到控制台到绘制直线,矩形甚至是打印一个完整的表单等。

 

图1.GDI+担当着重要的中介作用

那么,GDI+是如何工作的呢?为了弄清这个问题,让我们来分析一个示例—绘制一条线段。实质上,一条线段就是一个从一个开始位置(X0,Y0)到一个结束位置(Xn,Yn)的一系列像素点的集合。为了画出这样的一条线段,设备(在本例中指显示器)需要知道相应的设备坐标或物理坐标。

然而,开发人员不是直接告诉该设备,而是调用GDI+的drawLine()方法,然后,由GDI+在内存(即“视频内存”)中绘制一条从点A到点B的直线。GDI+读取点A和点B的位置,然后把它们转换成一个像素序列,并且指令监视器显示该像素序列。简言之,GDI+把设备独立的调用转换成了一个设备可理解的形式;或者实现相反方向的转换。

至此,我们已经简单了解了GDI+的工作机理。现在,让我们开始探讨如何实现一些基本的图像操作。

二、图像操作—缩略图,缩放与保存

在本文示例中,我们将实现如下的任务:

1. 创建缩略图。

2. 缩放一个加载的图像。

3. 保存一个操作中的图像。

a) 创建缩略图
缩略图是图像的浓缩版本。典型情况下,一幅缩略图图像的尺寸为80×200像素。在GDI+中,一个图像的缩略图可以通过使用Image类的GetThumbnailImage()方法来创建。其函数原型如下:

public Image GetThumbnailImage (
int thumbWidth,
int thumbHeight,
GetThumbnailImageAbort callback,
IntPtr callbackData
)

第一个参数相应于缩略图的宽度;第二个参数相应于生成的缩略图的高度;第三个参数是一个Image.GetThumbnailImageAbort委托。在 GDI+ 1.0 版中不使用此委托。即便如此,也必须创建一个委托并在该参数中传递对此委托的引用。第四个参数同样没有使用,但是也需要提供以实现兼容性。注意,第四个参数必须为IntPtr.Zero。

如果前两个参数(也就是宽度和高度)都为0的话,那么,GDI+返回一个嵌入式缩略图。否则,使用系统定义尺寸创建该缩略图。例如,如果img是一个图像类的实例,并且使用的宽度和高度都是系统定义的,创建一个缩略图的语句应该如下所示:

Image thumbNailImage = img.GetThumbnailImage(0,0,tnCallBack,IntPtr.Zero);

在此,thumbNailImage包含返回的缩略图,而tnCallback是一个相应于Image.GetThumbnailImageAbort的函数,其定义如下:

//必须调用它,但是没有使用
style='font-size:10.0pt;font-family:Verdana'>publicbool tnCallbackMethod()
...{
return false;
}

b) 缩放一个加载的图像

缩放是放大或缩小一个图像的过程—通过在图像尺寸上乘以缩放因子实现。其中,缩放因子=期望的图像尺寸/当前图像尺寸。例如,要把一个图像放大200%,则当前尺寸必须乘以200%(200%=200/100=2);为了缩小一个图像到25%,则当前尺寸必须乘以25%或0.25(25/100=0.25倍)。

c) 保存图像

保存操作是图像操作中的关键操作之一。在保存一个图像时,图像相应的类型信息也必须进行保存;也就是说,该图像的扩展名在这一过程中具有重要角色。每一种类型相应于一个特定的格式。实质上,在保存一个图像时,根据该格式输出数据是非常必要的。然而,借助于GDI+ API的优势,一个对Image类的Save()方法的简单调用就可以把相应的写数据操作中所有细节省略掉。这个方法使用两个参数—被保存的图像的名字和待保存图像的格式。该格式能够通过ImageFormat类提供的类型来指定。下列表格指定了GDI+支持的各种图像格式。

属性               描述
Bmp                指定BMP格式。
Emf                 指定EMF(增强的元文件格式)。
Exif                 指定EXIF格式。
Gif                   指定GIF格式。
Guid                指定一个GUID结构,用于描述ImageFormatobject。
Icon                指定Windows图标格式。
Jpeg                指定JPEG格式。
MemoryBmp   指定内存位图格式。
Png                 指定PNG格式。
Tiff                  指定TIFF格式。
Wmf               指定WMF(Windows元文件格式)。

其中,Emf和Wmf是特定于Windows系统的。

假定你想使用名字“checker.gif”保存一个图像,那么,相应的实现语句将是:

curImage.Save(“checker.gif”,ImageFormat.Gif);

这里,curImage对应于Image类的实例。

在下一节中,我将对前面开发的这个应用程序进行扩展。


共3页: 1 [2] [3] 下一页
【内容导航】
关于 .Net  C#  GDI+  基础
专题
WCF开发基础
Visual Studio 2005开发基础
服务器维护与应用基础
网络技术经典基础教程
服务器基础知识入门
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看81120次)
·UML类图详解 (查看72587次)
·C++是垃圾语言?! (查看42719次)
·C#技术开发指南 (查看40290次)
·UML统一建模语言 (查看39225次)
·Java编程开发手册 (1198个砖)
·Java基础教程 (431个砖)
·C#技术开发指南 (311个砖)
·.NET开发手册 (254个砖)
·PB开发教程 (223个砖)
·Java编程开发手册 (658个好)
·Java基础教程 (578个好)
·.NET开发手册 (282个好)
·PB开发教程 (213个好)
·Delphi开发技术手册 (200个好)
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。