扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
注意,在此新添加的代码分别在原来的图像宽度和高度上乘以放大因子以生成一个放大的图像。然后,必须相应地修改paint事件的处理器。如下所示:
private void Form1_Paint(object sender, PaintEventArgs e)
...{
if (curImage != null && i==0)
...{
Graphics g = this.CreateGraphics();
g.DrawImage(curImage, new Rectangle
(AutoScrollPosition.X,
AutoScrollPosition.Y ,
(int)(this.ClientRectangle.Width * curZoom),
(int)(ClientRectangle.Height * curZoom)));
}
}
该图像应该有根据放大因子的相应的高度和宽度。下面,我们来看一下mnu200Zoom菜单项相应的事件处理器:
private void mnu200_Click(object sender,System.EventArgs e)
...{
if(curImage != null)
...{
curZoom = (double)200/100;
i++;
Invalidate();
}
}
最后,我们来看一下mnuThumbNail菜单项相应的事件处理器:
1private void mnuThumbnail_Click(object sender, EventArgs e)
2...{
3if(curImage != null)
4...{
5i++;
6//回调
7Image.GetThumbnailImageAbort tnCallBack =
8new Image.GetThumbnailImageAbort(tnCallbackMethod);
9//得到缩略图图像
10Image thumbNailImage = curImage.GetThumbnailImage
11(100, 100, tnCallBack, IntPtr.Zero);
12//创建一个Graphics对象
13Graphics tmpg = this.CreateGraphics();
14tmpg.Clear(this.BackColor);
15//画缩略图图像
16tmpg.DrawImage(thumbNailImage, 10, 10, thumbNailImage.Width, thumbNailImage.Height);
17//释放掉Graphics对象
18tmpg.Dispose();
19}
20
21}
22
在此,我们首先创建一个GetThumbnailImageAbort类型的变量并且赋给它值tnCallbackMethod()—这是通过传递给该方法GetThumbnailImageAbort实现的。然后,它创建一个新的Image类的实例以存储GetThumbnailImage方法返回的图像—此后,这个方法将用于把缩略图绘制到屏幕上。
四、小结
在本文中,我仅讨论了.NET C#环境下关于GDI+编程的一些基本的实用操作片断。在以后的文章中,我们将逐渐展开对.NET GDI+编程高级特征的探讨。
【注】 ①本文源码在Windows XP Professonal+VS2005环境下调试通过;
②本示例中私有变量的i的引入仅为了把屏幕重绘与缩略图绘制区别开来,读者可考虑其它更巧妙的办法;
③图像重绘及滚动过程中出现屏幕抖动现象,读者可结合有关图像绘制双缓冲技术予以改进。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者