drawlines( 四 )


{
protected override void OnPaint(PaintEventArgs e)、
base.OnPaint(e)Graphics dc = e.Graphics;
dc.ScaleTransform(1.0f, 1.0f);
dc.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
dc.DrawImage(piccy, piccyBounds);
}
最后,特别注意对向导生成的 Form1.Dispose()方法代码进行修改∶
protected override void Dispose(bool disposing)
{
piccy.Dispose();
if( disposing)
{
if (components != null)
{components.Dispose();}
base.Dispose( disposing );’
}
只要不再需要该图像了,就应立即删除它,因为图像在使用时一般会占用许多内存 。在调用Image.Dispose()后,Image 实例就不再引用任何图像,所以不再显示图像(除非加载了一个新图像) 。
处理图像时所涉及到的问题
显示图像是很简单的,但需要理解一些底层技术 。
理解图像最重要的一点是,图像总是矩形的 。这不只是方便了人们,其原因是其底层的技
术 。所有的现代图形卡都内置了硬件,可以非常高效地从内存的一个地方把像素块复制到另一个地方 。假定像素块表示一个矩形区域,这个硬件加速操作可以虚拟为一个操作,而且执行速
度非常快 。实际上,这是现代高性能图像的关键 。这个操作称为位图块传输(或者 BitBIt) 。
Graphics.DrawImageUnscaled()在内部使用 BitBlt,这就是为什么能够看见一个大图像的原因,该图像也许包含上百万个像素,但几乎是立即就显示出来 。如果计算机必须把图像一个像素一个像素地复制到屏幕上,该图像就会在几秒钟内逐渐画出来 。
BitBIt 的效率非常高,所以图像的所有绘制和处理操作都是使用 BitBIt 完成的 。甚至图像的某些编辑也是使用表示内存区域的设备环境之间图像的 BitBIt 部分完成的 。在 GDI 中 。Windows 32 API函数 BitBIt()是最重要、使用最广泛的图像处理函数,而在 GDI+中,BitBIt 操作一般隐藏在 GDI+对象模型中 。
【drawlines】图像的 BitBlt 区域不可能是矩形的,但很容易模拟类似的效果 。一种方式是为了 BitBIt,把某种颜色标记为透明的 。这样源图像中该颜色的区域不会覆盖目的设备中对应区域的现有颜色 。在 BitBIt 过程中还可以指定,结果图像的每个像素会在进行 BitBIt 前,对源图像上和目的设备上该像素的颜色进行某些逻辑操作来形成(例如按位 AND) 。这样的操作是由硬件加速来支持的,用于产生各种微妙的效果 。注意 Graphics 对象执行另一个方法 DrawImage(),该方法类似于DrawlmageUnscaled(),但它有许多重载方法,可以指定 BitBIt 更复杂的形式,以便在绘图过程中使用 。DrawImage(还可以只绘制图像的某个特定部分,或者对它执行其他操作,例如在绘图时缩放(扩展或缩小其大小)它 。


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