drawlines( 三 )


dc.TranslateTransform(scrollOffset.X, scrollOffset.Y);
if(e.ClipRectangle.Top+scrollOffset.X<350||e.ClipRectangle.Left+scroliOffset.Y<250)
{
dc.DrawRectangle(bluePen,rectangleBounds);
dc.FillRectangle(solidYellowBrush, rectangleBounds);
dc.DrawEllipse(redPen, ellipseBounds);
dc.FillEllipse(solidAzureBrush,ellipseBounds);
dc.DrawLine(brickWidePen, rectangleBounds.Location,ellipseBounds.Location+ellipseBounds.Size);
}
}


drawlines

文章插图



显示图像
使用 GDI+最常想做的是显示文件中已有的图像, 我们只需要加载文件,比绘制自己的用户界面简单多了.让 GDI+显示它即可 。图像可以只包含一个线条或一个图标,也可以比较复杂,例如一张照片 。对图像也可以执行某些操作,例如拉伸或旋转图像,也可以选择只显示图像的一部分 。
需要.NET 的基类 System.Drawing.Image 。Image 实例表示一个图像 。
读取图像仅需使用一行代码∶
Image myImage = Image.FromFile("FileName");
FromFile()是 Image 的一个静态成员,是实例化图像的常用方式 。文件可以是任何支持的图像文件格式,包括.bmp、.jpg、.gif 和.png 。
显示图像是很简单的,假定有一个合适的 Graphics 实例,则调用 Graphics.DrawIlmage Unscaled()或 Graphics.DrawImage()就足够了 。这些方法都有许多重载方法,可以根据图像的位置和要绘制的大小非常灵活地处理用户提供的信息 。下面要使用 DrawImage()∶
dc.DrawImage(myImage, points);
在这行代码中,假定 dc 是一个 Graphics 实例,MyImage 是要显示的图像,points 是一个Point 结构数组,其中 points[0]、points[1]和 points[2]是图像左上角、右上角和左下角的坐标 。
注意∶
熟悉 GDI的开发人员可以从图像中看出GDI与 GDI+的最大区别 。在GDI中,显示图像涉及到几个重要的步骤 。如果图像是一个位图,加载它是很简单的,但如果它是其他类型的文件,加载它会涉及一系列 OLE 对象的调用 。把加载的图像显示到屏幕上要获得它的一个句柄,把它放在一个内存设备环境中,然后在设备环境之间执行一个块传输 。设备环境和句柄仍在后台上,但如果要开始在代码中对图像进行复杂的编辑,就需要它们 。简单的任务封装在 GDI+对象模型上 。
下面用一个示例 DisplayImage 来说明显示图像的过程 。这个示例在应用程序的主窗口中显示.jpg 文件 。要使操作过程简单一些,.jpg 文件的路径硬编码到应用程序中(如果运行该示例,就需要改变该路径,以反映系统中文件的位置) 。显示的.jpg 文件是伦敦的日落图片 。
与其他例子一样,DisplayImage项目是 C# Visual Studio 2005生成的一个标准的 Windows 应用程序 。在 Form1类中添加下述字段∶
Image piccy;
private Point [] piccyBounds;
然后在 Form1(构造函数中加载文件∶
public Form1()
{
InitializeComponent();
picy=Image.FromFile(@"C:\ProCSharp\GdiPlus\'Images\London.bmp");
this.AutoScrollMinSize = piccy.Size;
piccyBounds = new Point[3];
// top left
piccyBounds[0] = new Point(0,0);
piccyBounds[1] = new Point(piccy.Width,0); // top right
piccyBounds[2]= new Point(0,piccy.Height); // bottom left
}
注意图像的大小(像素)是通过其 Size 属性来获得的,我们使用该属性设置文档区域 。再建立一个piccyBounds 数组,用于指定图像在屏幕上的位置 。选择3个角的坐标,按实际大小来绘制图像,但如果要重新设置图像的大小、拉伸图像,或把图像变形为非矩形的平行四边形,可以改变 piccyBounds 数组中Point 的值 。
通过OnPaint()重写方法显示图像∶


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。