背景:最近换了个项目组,WinForm的项目。有个需求是播放图片,模拟视频的效果,每一张图片就是一帧,图片大小分两种,100K左右的和300K左右的。
问题:在保证切换图片的时候画面不闪烁(或闪烁不明显也行)的前提下,如何最快速的加载图片?
我的思路:其实也谈不上思路,第一次遇到这种需求,网上查了半天,有一个初步的解决方案,全是C#的东西,代码如下:private void DoubleBuffer()
        {
            DateTime t1 = DateTime.Now;            Image image = Image.FromFile(imagePathList[index]);
            BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current;
            BufferedGraphics myBuffer = currentContext.Allocate(pictureBox1.CreateGraphics(), this.DisplayRectangle);
            Graphics g = myBuffer.Graphics;
            g.Clear(Button.DefaultBackColor);
            Rectangle destRect = new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height);
            g.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);
            myBuffer.Render();            DateTime t2 = DateTime.Now;
            TimeSpan sp = t2 - t1;
            if (sp.Milliseconds != 0)
            {
                float per = 1000 / sp.Milliseconds;
                lbSpeed.Text = "速度:" + per.ToString() + "帧/秒";
            }            myBuffer.Dispose();
            g.Dispose();
            image.Dispose();            index++;
            if (index >= imagePathList.Count)
            {
                index = 0;
            }
        }代码是网上拷的,运行效果一般,全屏的时候最高能达到20帧每秒。
现在,在这里问问大家,还有没有其他的解决方案?
我听说有个windowsAPI里的函数bitblt加载很快,可我大概试了下,差别不大,也可能是我不会用这个函数哈。总之,问问大家有没有更好的方案,C#的可以,非托管的也可以,当然要能在C#里面用哈。有没有代码都不重要,有思路也好,拜托大家了。

解决方案 »

  1.   

    本帖最后由 caozhy 于 2012-02-09 02:20:17 编辑
      

  2.   

    gdi就这样了,参考DirectX,使用显卡GPU处理
      

  3.   

    多谢各位提供的思路。我这就去看看DirectX
      

  4.   

    播放圖片?看這個,很專業
    http://cellbi.com/products/svfx.aspx
      

  5.   

    Image image = Image.FromFile(imagePathList[index]);
    每次都从文件加载图像,神仙都救不了你,想快就只好找更好的硬件了吧。那些绘制函数的速度相对于文件解码来说都至少快乐一个量级。
      

  6.   

    cellbi.svfx 有很多效果轉換