【转】Graphics.DrawImage 方法 IntPtr 结构 GDI 句柄 知识收集
2013-11-06 17:56
417 查看
Graphics.DrawImage方法
在指定的位置使用原始物理大小绘制指定的Image。
命名空间:System.Drawing程序集:System.Drawing(在system.drawing.dll中)
要绘制的Image。
point
Point结构,它表示所绘制图像的左上角的位置。
publicvoidDrawImagePoint(PaintEventArgse)
{//Createimage.
ImagenewImage=Image.FromFile("SampImag.jpg");
//CreatePointforupper-leftcornerofimage.
PointulCorner=newPoint(100,100);
//Drawimagetoscreen.
e.Graphics.DrawImage(newImage,ulCorner);
}
要绘制的Image。
destRect
Rectangle结构,它指定所绘制图像的位置和大小。将图像进行缩放以适合该矩形。
srcX
要绘制的源图像部分的左上角的x坐标。
srcY
要绘制的源图像部分的左上角的y坐标。
srcWidth
要绘制的源图像部分的宽度。
srcHeight
要绘制的源图像部分的高度。
srcUnit
GraphicsUnit枚举的成员,它指定用于确定源矩形的度量单位。
imageAttrs
ImageAttributes,它指定image对象的重新着色和伽玛信息。
callback
Graphics.DrawImageAbort委托,它指定在绘制图像期间要调用的方法。此方法被频繁调用以检查是否根据应用程序确定的条件停止DrawImage方法的执行。
callbackData
一个值,它为Graphics.DrawImageAbort委托指定在检查是否停止执行DrawImage方法时要使用的附加数据。
实例:
------------------------------------------------分割线----------------------------------------------------
命名空间:System程序集:mscorlib(在mscorlib.dll中)
IntPtr类型被设计成整数,其大小适用于特定平台。即是说,此类型的实例在32位硬件和操作系统中将是32位,在64位硬件和操作系统上将是64位。
IntPtr类型可以由支持指针的语言使用,并可作为在支持与不支持指针的语言间引用数据的一种通用方式。
IntPtr对象也可用于保持句柄。例如,IntPtr的实例广泛地用在System.IO.FileStream类中来保持文件句柄。
IntPtr类型符合CLS,而UIntPtr类型却不符合。只有IntPtr类型可用在公共语言运行时中。UIntPtr类型大多数是提供来维护与IntPtr类型之间的体系结构上的对称性。
此类型实现ISerializable接口。
------------------------------------------------分割线----------------------------------------------------
图形设备接口(GraphicsDeviceInterface或GraphicalDeviceInterface,缩写GDI),是微软公司视窗操作系统(MicrosoftWindows)的三大核心部件(也称“子系统”)之一。GDI是微软视窗系统表征图形对象及将其传送给诸如显示器、打印机之类输出设备的标准。GDI类似Macintosh传统的QuickDraw。
简介
在DOS时期,应用程式如果要对于显示设备做输出的话,必须使用INT10[1],或对于VGA卡直接I/O,或直接对VRAM所在的记忆体位置作填值。但VGA卡当时日新月异,各家的VGA卡在其I/Oports的定义并不一致,虽中间有推出一个名为VESASVGA的显卡驱动程式的共用标准,但由于DOS时先天的64KB的分页限制,仍有许多不便。
微软在开发Windows时,发现这个问题,于是决定打造一个GDI子系统,将显示设备改以API的方式进行操作,以便将各VGA卡的差异透过各VGA卡厂商自行制作的驱动程式来衔接GDI,来打消各VGA卡在操作上的彼此差异。
但微软很快就被其他的程式开发者告知,GDI太慢了,因此Microsoft就再出一个WING[2]用于Windows3.0/3.1,让应用程式能够直接对VRAM进行填值,以加速绘图的相关计算。
后来,WING再改为DirectDraw成为DirectX的一部分,直到DirectX7。(DirectX8以后,DirectX中2D与3D显示技术合并,开始进入全3D的贴图计算方式)
后来,微软再推.NetFramework,又再把GDI用.NetFramework方式进行封装,可是由于GDI本身的限制,再加上微软自己在MSDNLibrary上面用来写着爽的文档(有些功能已有技术文档,但从未实做出可用之功能过),再加上GDI+在图形计算与显示很慢,以及GDI+先后饱受远程代码执行的漏洞的困扰,因此GDI+无法成为微软在图形子系统的主流。
再后来,DirectX10进入XNA的时代,XNA是以DirectX的COM为基础,以.NetFramework方式进行封装,所以XNA身兼DirectX的性能与.NetFramework的使用便利性。XNA目前被应用于XBOX系列的游戏主机上,已成为新一代的图形子系统的主流。
WindowsXP操作系统开始引入,提供二维的向量图形,改进旧有的GDI,加强的视觉化属性,例如边界,渐变和透明。通过GDI+,能够直接将BMP转成JPG或其它格式的图片,还能够生成SVG、Flash等。GDI+使用ARGB的值来表示颜色。GDI+的双缓冲技术可以提高绘图效率,可避免屏幕闪烁。
GDI+号称提供了硬件加速功能,可以直接访问硬件。但这似乎是夸饰的说法,GDI+无法直接使用VGA卡上的GPU来加速绘图的相关计算,因此在绘图性能上远远不及DirectX,只能做到Lock记亿体进行操作。(GDI+只是一组重新封装GDI的API,DirectX则是从COM到底层的显卡驱动程式的组合)
随GDI+推出了加强型EMF,即EMF+,可以同时支持GDI和GDI+。Microsoft.NET透过System.Drawing命名空间提供对GDI+的支援。TheGDI+的DLL可移植到旧有的Windows版本上。
GDI+类似Apple的Quartz2D子系统,以及属于开放源码(open-source)的libart和Cairo库。
------------------------------------------------分割线----------------------------------------------------
句柄,是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。句柄是windows用来标志应用程序中建立的或是使用的唯一整数,windows使用了大量的句柄来标志很多对象。
原理 WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的。相反,WINDOWSAPI给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。
在《WINDOWS编程短平快》(南京大学出版社)一书中是这么说的:句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。
从上面的2个定义中我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的。它就像我们的车牌号一样,每一辆注册过的车都会有一个确定的号码,不同的车号码各不相同,但是也可能会在不同的时期出现两辆号码相同的车,只不过它们不会同时处于使用之中罢了。从数据类型上来看它只是一个32位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。在WINDOWS编程中会用到大量的句柄,比如:HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC(设备描述表句柄),HICON(图标句柄)等等。这当中还有一个通用的句柄,就是HANDLE。
在指定的位置使用原始物理大小绘制指定的Image。
命名空间:System.Drawing程序集:System.Drawing(在system.drawing.dll中)
publicvoidDrawImage( Imageimage, Pointpoint )
参数
image要绘制的
point
publicvoidDrawImagePoint(PaintEventArgse)
{//Createimage.
ImagenewImage=Image.FromFile("SampImag.jpg");
//CreatePointforupper-leftcornerofimage.
PointulCorner=newPoint(100,100);
//Drawimagetoscreen.
e.Graphics.DrawImage(newImage,ulCorner);
}
Graphics.DrawImage方法(Image,Rectangle,Single,Single,Single,Single,GraphicsUnit,ImageAttributes,Graphics.DrawImageAbort,IntPtr)
参数
image要绘制的
destRect
srcX
要绘制的源图像部分的左上角的x坐标。
srcY
要绘制的源图像部分的左上角的y坐标。
srcWidth
要绘制的源图像部分的宽度。
srcHeight
要绘制的源图像部分的高度。
srcUnit
imageAttrs
callback
callbackData
一个值,它为Graphics.DrawImageAbort委托指定在检查是否停止执行DrawImage方法时要使用的附加数据。
实例:
usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Text; usingSystem.Windows.Forms;
usingSystem.IO; usingSystem.Reflection; usingSystem.Drawing.Imaging;
namespacetestWinCeGraphics { publicpartialclassForm1:Form { privatestringcurrentPath=Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);//获取PDA路径 privateBitmapbg,title,btn;
privateRectanglerectangle; ColortranspColor=Color.FromArgb(255,0,255);//资源文件的透明色 ImageAttributesimageAttr;
publicForm1() { InitializeComponent(); }
privatevoidForm1_Load(objectsender,EventArgse) { bg=newBitmap(currentPath+@"\image\bg294.jpg"); title=newBitmap(currentPath+@"\image\title.jpg");
btn=newBitmap(currentPath+@"\image\button.bmp"); rectangle=newRectangle(10,60,219,48); //rectangle=newRectangle(); imageAttr=newImageAttributes(); imageAttr.SetColorKey(transpColor,transpColor); }
privatevoidForm1_Paint(objectsender,PaintEventArgse) { e.Graphics.DrawImage(bg,0,0); e.Graphics.DrawImage(title,0,0);
//要更改图片显示请更改rectangle中x,y轴的坐标 e.Graphics.DrawImage(btn,rectangle,0,0,219,48,GraphicsUnit.Pixel,imageAttr); }
}
}
------------------------------------------------分割线----------------------------------------------------
IntPtr结构
用于表示指针或句柄的平台特定类型。命名空间:
[SerializableAttribute]
[ComVisibleAttribute(true)]
publicstructIntPtr:ISerializable
IntPtr类型被设计成整数,其大小适用于特定平台。即是说,此类型的实例在32位硬件和操作系统中将是32位,在64位硬件和操作系统上将是64位。
IntPtr类型可以由支持指针的语言使用,并可作为在支持与不支持指针的语言间引用数据的一种通用方式。
IntPtr对象也可用于保持句柄。例如,IntPtr的实例广泛地用在
IntPtr类型符合CLS,而
此类型实现
------------------------------------------------分割线----------------------------------------------------
图形设备接口(GraphicsDeviceInterface或GraphicalDeviceInterface,缩写GDI),是
简介
在
微软在开发Windows时,发现这个问题,于是决定打造一个GDI子系统,将显示设备改以API的方式进行操作,以便将各VGA卡的差异透过各VGA卡厂商自行制作的驱动程式来衔接GDI,来打消各VGA卡在操作上的彼此差异。
但微软很快就被其他的程式开发者告知,GDI太慢了,因此Microsoft就再出一个
后来,WING再改为DirectDraw成为
后来,微软再推.NetFramework,又再把GDI用.NetFramework方式进行封装,可是由于GDI本身的限制,再加上微软自己在MSDNLibrary上面用来写着爽的文档(有些功能已有技术文档,但从未实做出可用之功能过),再加上GDI+在图形计算与显示很慢,以及GDI+先后饱受远程代码执行的漏洞的困扰,因此GDI+无法成为微软在图形子系统的主流。
再后来,DirectX10进入
GDI+
GDI+从GDI+号称提供了硬件加速功能,可以直接访问硬件。但这似乎是夸饰的说法,GDI+无法直接使用VGA卡上的GPU来加速绘图的相关计算,因此在绘图性能上远远不及DirectX,只能做到Lock记亿体进行操作。(GDI+只是一组重新封装GDI的API,DirectX则是从COM到底层的显卡驱动程式的组合)
随GDI+推出了加强型
GDI+类似Apple的Quartz2D子系统,以及属于开放源码(open-source)的
------------------------------------------------分割线----------------------------------------------------
句柄,是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。句柄是windows用来标志应用程序中建立的或是使用的唯一整数,windows使用了大量的句柄来标志很多对象。
原理 WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的。相反,WINDOWSAPI给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。
在《WINDOWS编程短平快》(南京大学出版社)一书中是这么说的:句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。
从上面的2个定义中我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的。它就像我们的车牌号一样,每一辆注册过的车都会有一个确定的号码,不同的车号码各不相同,但是也可能会在不同的时期出现两辆号码相同的车,只不过它们不会同时处于使用之中罢了。从数据类型上来看它只是一个32位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。在WINDOWS编程中会用到大量的句柄,比如:HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC(
相关文章推荐
- Graphics.DrawImage 方法 IntPtr 结构 GDI 句柄 知识收集
- [收集]关于句柄的基础知识详解
- 【C#基础知识】之结构、数组及常用的几种排序方法总结
- Winform画背景图片的两种方法TextureBrush与Graphics.DrawImage()
- 各种无限分类树结构方法收集
- 收集的得到excel表格中数据的几个简单的方法
- 北航面试之数据结构知识要点
- 知识结构导航
- 数据库表结构设计方法
- Navicat for Mysql 只导出数据表结构(.sql文件)的方法
- Unity 3D知识体系结构
- Windows API-GDI入门基础知识详解(1)
- Laravel5中基于jQuery实现分层级的类目树结构方法
- Linux 字符设备驱动结构(四)—— file_operations 结构体知识解析
- Java基础知识——类的深层结构
- sqlserver 2008手工修改表结构,表不能保存的问题与解决方法
- SQL Server 索引基础知识(3)----测试中一些常看的指标和清除缓存的方法
- [C#] 200 连接数据库方法收集
- 网络知识收集 -Http Server
- 微博抓取之各种方法收集