双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

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

ArthurCX ArthurCX 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
背景:最近换了个项目组,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#里面用哈。有没有代码都不重要,有思路也好,拜托大家了。
...全文

相关推荐

评论 12
收藏 已收藏
分享
返回顶部
ArthurCX
C# 111,129 成员 642,540 内容