WinForm中panel控件放大缩小图片出现闪屏问题,需用缓存问题解决,可是加了几句构造函数还是不行??

我做的是个windows图片查看器需要放大缩小图片功能,可是每次单击放大缩小图片都会闪动一下,求解决。。。... 我做的是个windows图片查看器需要放大缩小图片功能,可是每次单击放大缩小图片都会闪动一下,求解决。。。 展开
 我来答
百度网友02cd4ce
推荐于2016-03-31 · TA获得超过516个赞
知道小有建树答主
回答量:709
采纳率:0%
帮助的人:736万
展开全部
WinForm 对图像处理本身就不太友好,放大或缩小会刷新界面控件,当然有闪烁。

1、不使用图片作为背景,而用纯色替代,如果是这样的话,也就不会出现闪屏了,但如果UI上有特别要求的,这条路就行不通了。
2、重写Panel,然后在Panel中添加背景图片,而不是把背景图片添加到Form中,重写的Panel代码如下:

View Code 1 /// <summary>
2 /// 一个Panel类,当设置背景图片时,控制其不会闪屏
3 /// </summary>
4 public class BackgroundPanel : Panel
5 {
6 protected override void OnPaintBackground(PaintEventArgs e)
7 {
8 return;
9 }
10
11 protected override void OnPaint(PaintEventArgs e)
12 {
13
14 this.DoubleBuffered = true;
15 if (this.BackgroundImage != null)
16 {
17 e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
18 e.Graphics.DrawImage(this.BackgroundImage, new System.Drawing.Rectangle(0, 0, this.Width, this.Height),
19 0, 0, this.BackgroundImage.Width, this.BackgroundImage.Height,
20 System.Drawing.GraphicsUnit.Pixel);
21 }
22 base.OnPaint(e);
23 }
24 }
3、使用Form的双缓存可以减少闪屏,但效果不明显,可以在Form的Load事件里添加以下代码

View Code1 this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
2 this.SetStyle(ControlStyles.DoubleBuffer, true);
3 this.SetStyle(ControlStyles.UserPaint, true);
4 this.SetStyle(ControlStyles.ResizeRedraw, true);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式