GDI与GDI+ 贴图性能对比
在做绘图相关工作,由于对显示绘制结果实时性有要求,筛选了GDI , 与GDI+ 贴图性能。
这里假设在内存中已绘制完成一张图片,现需求显示在控件上,同时,总是更新全部区域。
GDI+ 实现
private void PainDraw(Bitmap bitmap) {
pictureBox1.Invalidate();
//只调用Invalidate() 并非实时更新, 它会合并多个无效区,且延时显示, Update() 强制更新
pictureBox1.Update();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
i++;
if (i > )
{
i = ;
}
e.Graphics.DrawImage(bitmap, new Rectangle(i, , bitmap.Width, bitmap.Height));
}
调用1000次,测帧速
private void button2_Click(object sender, EventArgs e)
{
System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch(); path = @"C:\Users\zhoupeng\Pictures\BackgroundDefault.bmp";
if (bitmap == null)
bitmap = new Bitmap(path); stopWatch.Start(); for (int i = 0; i < 1000; i++)
{
PainDraw(bitmap);
} stopWatch.Stop(); Console.WriteLine("帧率:{0}", 1000 / (stopWatch.ElapsedMilliseconds / 1000f)); }
结果:
帧率:88.81783
帧率:91.14108
帧率:92.28497
帧率:83.167
GDI 实现
int i = ;
private void SnapShot(PictureBox c, Bitmap bitmapsrc, IntPtr dc1)
{
IntPtr dc2 = GetWindowDC(c.Handle);
i++;
if (i > ) {
i = ;
} BitBlt(dc2, i, , bitmapsrc.Width, bitmapsrc.Height, dc1, , , TernaryRasterOperations.SRCCOPY); DeleteDC(dc2);
} private void button3_Click(object sender, EventArgs e)
{ System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch(); path = @"C:\Users\zhoupeng\Pictures\BackgroundDefault.bmp";
if (bitmap == null)
bitmap = new Bitmap(path); stopWatch.Start();
Graphics g = Graphics.FromImage( bitmap);
IntPtr dc1 = CreateCompatibleDC(g.GetHdc());
IntPtr dcbitmap;
IntPtr pOrig = SelectObject(dc1, dcbitmap = bitmap.GetHbitmap()); for (int i = ; i < ; i++)
{
SnapShot(pictureBox1, bitmap, dc1);
} DeleteDC(dc1);
DeleteObject(dcbitmap);
g.ReleaseHdc(dc1);
g.Dispose();
stopWatch.Stop(); Console.WriteLine("帧率:{0}", / (stopWatch.ElapsedMilliseconds / 1000f));
}
结果:
帧率:4651.163
帧率:4385.965
帧率:7812.5
帧率:5208.333
网上下载的另一份测试,更全面,具体:
https://files.cnblogs.com/files/a_bu/BitBltTest.rar
GDI与GDI+ 贴图性能对比的更多相关文章
- GDI与GDI+性能比较
编写程序对GDI和GDI+绘制进行了比较,经过比较,GDI相对GDI+还是有一些性能优势的. 同时比较了每次绘制创建TGPGraphics对象和共用一个TGPGraphics对象的情况,两者性能相差不 ...
- Flash 矢量图和位图性能对比 导出为位图/缓存为位图 export as bitmap / cache as bitmap
大家都知道Flash处理矢量图比位图要慢,而具体的性能上对比也有不少的前人已经做过.http://bbs.9ria.com/forum.php?mod=viewthread&tid=2282 ...
- Intel和AMD的CPU性能对比图
Intel和AMD的CPU性能对比图:
- [原] KVM 环境下MySQL性能对比
KVM 环境下MySQL性能对比 标签(空格分隔): Cloud2.0 [TOC] 测试目的 对比MySQL在物理机和KVM环境下性能情况 压测标准 压测遵循单一变量原则,所有的对比都是只改变一个变量 ...
- iOS中保证线程安全的几种方式与性能对比
来源:景铭巴巴 链接:http://www.jianshu.com/p/938d68ed832c 一.前言 前段时间看了几个开源项目,发现他们保持线程同步的方式各不相同,有@synchronized. ...
- StringBuilder和string.Format性能对比
本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/sbformat.html StringBuilder的性能优于string.For ...
- SQL点滴10—使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比
原文:SQL点滴10-使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比 今天偶尔看到sql中也有with关键字,好歹也写了几年的sql语句,居然第一次接触,无知啊.看了一位博主的文章 ...
- 2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)
2017年的golang.python.php.c++.c.java.Nodejs性能对比 本人在PHP/C++/Go/Py时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不 ...
- Net Core下多种ORM框架特性及性能对比
在.NET Framework下有许多ORM框架,最著名的无外乎是Entity Framework,它拥有悠久的历史以及便捷的语法,在占有率上一路领先.但随着Dapper的出现,它的地位受到了威胁,本 ...
随机推荐
- phprpc的简单使用
PHPRPC 是一个轻型的.安全的.跨网际的.跨语言的.跨平台的.跨环境的.跨域的.支持复杂对象传输的.支持引用参数传递的.支持内容输出重定向的.支持分级错误处理的.支持会话的.面向服务的高性能远程过 ...
- 【转】关于 mate viewport属性的具体说明!
什么是Viewport 手机浏览器是把页面放在一个虚拟的"窗口"(viewport)中,通常这个虚拟的"窗口"(viewport)比屏幕宽,这样就不用把每个网页 ...
- iOS获取当前时间
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // ----------设置你想要的格式,hh与HH的区别:分别表示12小时 ...
- 关于mysql中实现replace的sql语句
update 表名 set 字段名=replace(字段名, '旧字符串', '新字符串')
- js canvas压缩图片上传
$('input[type="file"]').on('change',function(){ var files = !!this.files ? this.files : [] ...
- POI 解析xls
1.所需jar包 poi-3.6.jar poi-ooxml-3.6.jar 2.M.java package junit; import java.io.FileInputStream; impor ...
- servlet获取表单数据的方式和编码方式
.在servlet中获取表单的数据的几种方式 1>request.getParameter(“name”)://获取指定名称的值,返回值类型是一个字符串 2>request.getPa ...
- win7 winsxs精简 cmd 脚本之 再次 改进版
dos时代菜鸟发表于 2012-7-24 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=255200&highlight=win7 ...
- 首页自动生成静态化html
由于平台老是出现间歇性502.排查发现,php死进程过多耗费大量系统资源. 除了优化代码之外,静态化可以减少php进程.缓解一下服务器压力. 把首页生成html后,出现问题频率下降.所以需要做首页静态 ...
- eclipse: The superclass "javax.servlet.http.HttpServlet" was not found 解决方案
解决步骤: 1. 安装Tomcat8.5 Server 2. eclipse 新建Tomcat 8.5 Server 3. 配置build path 添加 Server Runtime 1.右键项目 ...