在C#中如何最快的加载图片到控件上

ArthurCX 2012-02-09 01:42:43
背景:最近换了个项目组,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#里面用哈。有没有代码都不重要,有思路也好,拜托大家了。
...全文
864 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArthurCX 2012-02-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 laviewpbt 的回复:]

Image image = Image.FromFile(imagePathList[index]);
每次都从文件加载图像,神仙都救不了你,想快就只好找更好的硬件了吧。

那些绘制函数的速度相对于文件解码来说都至少快乐一个量级。
[/Quote]

那你的意思是要想提升效率,要从文件解码加载上入手?
ArthurCX 2012-02-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 crackdung 的回复:]

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

多谢多谢啦。。。:)
crackdung 2012-02-09
  • 打赏
  • 举报
回复
播放圖片?看這個,很專業
http://cellbi.com/products/svfx.aspx
ArthurCX 2012-02-09
  • 打赏
  • 举报
回复
多谢各位提供的思路。我这就去看看DirectX
ArthurCX 2012-02-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caozhy 的回复:]
最快的方式是 DriectDraw 直接绘屏。

因为是GPU运算,所以最快。
[/Quote]

多谢多谢。。。:)
ZhangNan20100811 2012-02-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bdmh 的回复:]
gdi就这样了,参考DirectX,使用显卡GPU处理
[/Quote]
+1 mark
杨友山 2012-02-09
  • 打赏
  • 举报
回复
看看,没研究过。
bdmh 2012-02-09
  • 打赏
  • 举报
回复
gdi就这样了,参考DirectX,使用显卡GPU处理
threenewbee 2012-02-09
  • 打赏
  • 举报
回复
最快的方式是 DriectDraw 直接绘屏。

因为是GPU运算,所以最快。
crackdung 2012-02-09
  • 打赏
  • 举报
回复
cellbi.svfx 有很多效果轉換
laviewpbt 2012-02-09
  • 打赏
  • 举报
回复
Image image = Image.FromFile(imagePathList[index]);
每次都从文件加载图像,神仙都救不了你,想快就只好找更好的硬件了吧。

那些绘制函数的速度相对于文件解码来说都至少快乐一个量级。

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧