在C#中如何最快的加载图片到控件上
背景:最近换了个项目组,WinForm的项目。有个需求是播放图片,模拟视频的效果,每一张图片就是一帧,图片大小分两种,100K左右的和300K左右的。
问题:在保证切换图片的时候画面不闪烁(或闪烁不明显也行)的前提下,如何最快速的加载图片?
我的思路:其实也谈不上思路,第一次遇到这种需求,网上查了半天,有一个初步的解决方案,全是C#的东西,代码如下:
代码是网上拷的,运行效果一般,全屏的时候最高能达到20帧每秒。
现在,在这里问问大家,还有没有其他的解决方案?
我听说有个windowsAPI里的函数bitblt加载很快,可我大概试了下,差别不大,也可能是我不会用这个函数哈。
总之,问问大家有没有更好的方案,C#的可以,非托管的也可以,当然要能在C#里面用哈。有没有代码都不重要,有思路也好,拜托大家了。
问题:在保证切换图片的时候画面不闪烁(或闪烁不明显也行)的前提下,如何最快速的加载图片?
我的思路:其实也谈不上思路,第一次遇到这种需求,网上查了半天,有一个初步的解决方案,全是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#里面用哈。有没有代码都不重要,有思路也好,拜托大家了。
...全文
相关推荐
C#用PictureBox控件实现图片切换.rar
C#用PictureBox控件实现选择图片切换(不是自动切换
开机启动慢?程序懒加载+资源按需加载的提速方案
工业上位机的启动优化,本质是优先级管理:把有限的CPU、IO、网络资源,优先给启动阶段最核心的功能,让用户最快进入可操作状态;非核心的东西,往后放、按需来。很多项目越做越慢,不是功能多了,而是没有规划,什么都往启动流程里塞。做好分级、懒加载、按需加载,不用换硬件,就能获得非常明显的提速体验,同时还能降低内存占用,提升程序长期运行的稳定性。
C#如何使用图像控件显示图片
C#如何使用图像控件显示图片
C#实现动态生成picturebox控件,并在其载入不同的图片和文字
C#实现动态生成picturebox控件,并在其载入不同的图片和文字
C#使用webBrowser控件获取URL下载图片
通过C#网络编程的webBrowser获取网页中的url并简单的尝试下载网页中的图片,主要是为以后网络开发的基础学习.其中主要的通过应用程序结合网页知识、正则表达式实现浏览、获取url、下载图片三个功能.而且很清晰的解析了每一步都是以前一步为基础实现的.结合知识博客.



