1.为了增加程序的美观性,用一张图片作为整个程序背景,但是不同窗体之间切换的时候,可明显感觉到窗体上的按钮控件是一个一个显示出来的,而且有时候图片加载的速度也很慢。请问怎么解决这种问题,先谢谢了~
2.还是图片显示的问题,我在ACCESS中存了图片的路径,然后在程序中通过读取这些路径来显示图片,在一个窗口上一次要显示12幅图片,还是存在第一个问题,有些图片不能一下就显示出来,总要延迟零点几秒,请问有什么方法能消除掉这种延迟?

解决方案 »

  1.   

    速度和空间不能兼得,如果要速度可以考虑浪费点内存,启动程序时,用次线程读取图片,保存在一个专门保存的类中,使用时,直接从内存中取出,可以解决你的问题。
    如果你第一个问题在刷新时从文件中读图像,也对性能造成很大的影响,例如:Image.FromFile()就是从文件中读取图像,你可以在启动时读好存入变量,使用时直接从内存中加载,应该可以显著加快速度。
      

  2.   

    应该不是数据库读入的原因,看了不少帖子,从ACCESS中读图片路径,每秒能读取好几千条;问题2在没有问题1的时候也是会出现的;谢谢 liubaoen 的回复,我先试试哈
      

  3.   

    用Graphics类中的方法把图片画到bitmap上 然后画bitmap到panel上
      

  4.   


    Bitmap bit = new Bitmap(Image.FromFile(filepath))
    Graphics g = this.panel.CreateGraphics();
    g.DrawImage(bit, new Point(0, 0));
      

  5.   

    谢谢jmghoul的回复,你的方法确实可以快速显示图片,但是图片怎么闪一下就消失了?我是把图片作为整个窗体的背景?我对你的代码做了如下修改,怎么不行了?Bitmap bit = new Bitmap(Image.FromFile(filepath))
    Graphics g = this.CreateGraphics();
    g.DrawImage(bit, new Point(0, 0));
      

  6.   

    加快图片显示可以用ImageFast是第3方开发的转门用于加快图片显示。有人测试过了:
    Image.FromFile Ticks = 19,281,605.00
    ImageFast.FromFile Ticks = 7,557,403.00ImageFast的源码这里
      

  7.   

      首先感谢 yingkk 的分享,感谢这么多人的帮助。我把问题详细说一下,一个窗体上面有40多个按钮,现在我用一张大图(尺寸1024X768像素)作为整个窗体的背景。出现的问题:调用这个窗体,按钮是一个一个显示出来的,非常缓慢,让人不能接受。如果去掉背景图片,所有按钮一下就显示出来了。我想在保留图片作为背景的情况下怎么让按钮同时给快速显示出来。
      #6楼的兄弟给的代码能够让图片快速显示,同时也能保证按钮的刷新速度,但是就如我所说,图片闪一下就没了。
      

  8.   

    那是因为你没有吧#6楼的代码放到OnPaint方法里面。不放在里面的话,只能画一次,不会刷新
    protected override void OnPaint(PaintEventArgs e) 
    {
               Bitmap bit = new Bitmap(Image.FromFile(@"filepath"));
               Graphics g = this.panel1.CreateGraphics();
               g.DrawImage(bit, new Point(0, 0));
    }