首页 新闻 会员 周边

winform中picturebox画图问题

0
悬赏园豆:10 [已解决问题] 解决于 2016-03-31 23:43

最近初学GDI+,画图时发现一个问题,暂时不知道如何去查资料,也没有头绪,问题现象如下:

 

Form中有一PictureBox控件,在PictureBox控件的Onpaint事件里画图,代码摘要如下:

 1  //画背景图
 2 var img = File.Exists(path) ? Image.FromFile(path) : new Bitmap(this.pb.Width, this.pb.Height);
 3 var gh = Graphics.FromImage(img);
 4 
 5 ....
 6 
 7 //画些其它的小图片
 8 //  gh.DrawImage(devImage, devImageRec, descRec, GraphicsUnit.Pixel); //这里很奇怪,devImageRec其实是图片的尺寸,但是画出来却变得很小,而devImageRec是正常的,只是图片变小
 9 gh.DrawImageUnscaled(devImage, dev.X, dev.Y);
10 
11 ...
12 
13 //存图片
14   using (
15                 var fs = new FileStream(                    Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Region", fileName),
16                     FileMode.OpenOrCreate,
17                     FileAccess.ReadWrite,
18                     FileShare.ReadWrite))
19             {
20                 fs.Position = 0;
21                 fs.Write(buffer, 0, buffer.Length);
22                 fs.SetLength(buffer.Length);
23                 fs.Flush();
24 
25                 regionEntity.ExtendField1 = fileName;
26             }
27 
28 ...
29 
30 //将图片画到PictureBox画板上
31  var pbGh = pb.CreateGraphics();
32 pbGh.Clear(Color.White);
33  pbGh.DrawImage(img, new Point(0, 0));
34 
35 //资源释放
36 pbGh.Dispose();
37 gh.Dispose();
38 img.Dispose();

 

当Form被其它窗体遮盖,或者窗体失去焦点,或者最大化、最小化后,PictureBox上的图像就消失了。在这个过程中,能看到有时图像一闪而过,只不过最后看到的是没有图像。

 

图片闪烁比较严重,图片已作加载到缓存处理

/// <summary>
/// 加载图片的内存缓存
/// </summary>
private Dictionary<String, Image> imgMemoryCache = new Dictionary<string, Image>();

 

Key是图片的路径

Value 是图片加载后的Image对象

 

请有经验的师父指点,豆不多,全部奉上。

问题补充:

闪烁情况也比较严重

哑吧湖大水怪的主页 哑吧湖大水怪 | 初学一级 | 园豆:13
提问于:2014-05-25 13:21
< >
分享
最佳答案
0

不要这么整,在内存里把图片画好之后,直接显示到PictureBox就行了。

收获园豆:10
Soar、毅 | 菜鸟二级 |园豆:299 | 2014-06-11 10:27
其他回答(1)
0

你把img设置成全局的试试,这样应该能起到双缓冲的作用,这个img你只要初始化的时候new一下就好了,不要每次执行的时候都重新new,

当然,在方法执行完后也不要dispose

刘宏玺 | 园豆:14020 (专家六级) | 2014-05-26 14:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册