c#GDI+绘图速度的一些差异不理解

绘图效率完整解决方案——三种手段提高GDI/GDI+绘图效率 现在的cpu飞快,其实数学计算一般很快,cpu大部分时间是在处理绘图,而绘图有三种境界:1>每次重绘整体Invalidate(); 2>每次局部绘制Invalidate(Rect); 3>有选择的局部绘制。 不能说,一定是第三种方式好,得视情况,境界高程序肯定就复杂,如果对效率要求不高或者绘图量小当然直接用第一种方式。然而,稍微专业点的绘图程序,第一第二种方式肯定满足不了要求,必须 阅读详情

现象:各种图的速度绘制的差异。

 

1:绘制内存位图,例如

Bitmap _SourceBitmap=new Bitmap(800,480);

Bitmap _DesBitmap=new Bitmap(800,480);

 

           Rectangle ScreenRect = new Rectangle(0, 0, 800, 480);
            Rectangle rect_1 = new Rectangle(0, 0, 800, 480);

            Graphics gScreen = this.CreateGraphics();

            Bitmap _membitmap = new Bitmap(800, 480);
            Graphics g_membitmap = Graphics.FromImage(_membitmap);

            uint time1 = GetTickCount();
            int nCount = 0;
            for (int width = m_CartoonLen; width <= 800; width += m_CartoonLen)
            {
                nCount++;

                int _width = width;
                int _heihg = width * 3 / 5;
                int x = (800 - width) / 2;
                int y = (480 - _heihg) / 2;

                rect_1.X = x;
                rect_1.Y = y;
                rect_1.Width = _width;
                rect_1.Height = _heihg;

                //恢复矩形区域
                g_membitmap.DrawImage(_SourceBitmap, 0, 0);
                g_membitmap.DrawImage(_DesBitmap, rect_1, ScreenRect, GraphicsUnit.Pixel);
                gScreen.DrawImage(_membitmap, 0, 0);
            }

            uint time2 = GetTickCount();
            uint len = time2 - time1;

.........(省略)

 

 

得到的结果是.303

 

按照5/0.303=15帧的速度

 

如果是:

 _SourceBitmap = TestWinceSpeed.Properties.Resources.WallPaper__0_;
            _DesBitmap = TestWinceSpeed.Properties.Resources.WallPaper__1_;

 

得到的结果是:

257

 

按照5/0.25=20帧的速度。

 

说明差异在30%,是否非常明显的。但是不知道为什么。

 

 

再做一下试验:

 Graphics gScreen = this.CreateGraphics();
            uint time1 = GetTickCount();
            int nCount = 0;
            for (int i = 0; i < 100; i++)
            {
                nCount++;
                gScreen.DrawImage(_SourceBitmap, m_Rect_1, m_Rect_1, GraphicsUnit.Pixel);
            }
            uint time2 = GetTickCount();
            uint len = time2 - time1;

            Console.WriteLine(nCount.ToString() + "Fun Cost Time ms:" + len.ToString());

            gScreen.Dispose();
            gScreen = null;

 

 

如果来自SourceBitmap=new Bitmap();

打印值

鼠标点击=515

手指触摸=391

 

 

如果值来自于资源文件,打印值=409

如果我是用鼠标点击=409,

如果是手指触摸屏=283

 

 

 

更奇怪的是:

 

 

GDI+ 绘图速度与 CImage 速度比较 GDI+:    //使用Gdiplus image    DWORD iStart=GetTickCount();    Gdiplus::Bitmap bmp(_T("G://和动力//选择界面效果序列图//DJSelectedOut//一号舞台.png"));    CPaintDC dc(this);    Gdiplus::Graphics gs(dc.m_hDC);    for (i 阅读详情

相关推荐

c# 图片相似度处理,opencv

c# OpenCvSharp 图片相似度比较,四种方法对比,SSIM,PSNR,灰度直方图比较,RGB三通道全彩直方图比较,亲测,效果不错。

c#比较两张图像的差异

利用bitmap.LockBitsDisposable(...), if ((i + 1) % 4 == 0) *outputPtr = (byte)((*aPtr + *bPtr) / 2); else *outputPtr = (byte)~(*aPtr ^ *bPtr); 比较图像差异。

祝紫山(大可山人)博客[GDI+,WPF, .Net图形图像] 1720

C#中使用双缓冲以及BitBlt提高GDI+绘图效率的示例程序

利用GDI+在Form中绘制60*60个圆点,显示帧速,使用三种不同方法,分别是: 1.直接绘制 2.使用双缓冲 3.使用BitBlt函数 对比三种函数的帧速,以及提速效果 开发环境为vs2008

C#中提高绘制控件时的效率

在开发过程中,一般都会涉及到需要自己绘制控件来满足不同的需求,但是如果在绘制控件时,如果需要显示的东西太多,那么控件在显示时,肯定是需要很长时间才能显出出来,这样一来,如果控件刷新速度很快,就会产生问题了.    那么,如何解决这个问题呢?相信大家自然而然的都会想到,使用双缓冲

Lassewang的成长历程 3649

GDI绘图性能与效率的提高及改善

详细分析了对GDI绘图效率必善的方法,并涉及了一些DirectDraw的技术,收录了多篇业内高手的技术论文

EtherCAT-1 技术概述

1.EtherCAT简介①开放的技术EtherCAT全称EtherNet Control Automation Technology,是由德国倍福(Beckhoff)公司提出的一种实时以太网技术。EtherCAT是一种开放但不开源的技术,意味着您可以任意使用这项技术,但若要进行相关设备的开发,则需要向倍福公司获取相关授权。②快速性相比传统现场总线,EtherCAT的数据传输速率有了极大的提升,可选10Mbit/s或100Mbit/s,甚至依托补充

tianya_xuan的博客 3543

还在为 Graphics.DrawImage 速度慢的问题发愁吗,请看这里

这是本人来优快云首次写文章,请大家多关照。最近在公司做一个.NET下的SCADA程序,语言是C#,动画部分使用的是GDI+和Timer来绘制。在画图片的时候使用的是强大的Graphics类的DrawImage(DrawImageUnScaled),但是感觉不是一般的慢,这个时候想起以前在C+SDK时使用的BitBlt,效率很高,于是参考了一些资料并整理如下代码供大家参考: using S

chen_conspec的专栏 1万+

Excel炒股党必备:手把手教你用Power Query免费获取并刷新股票历史数据

本文详细介绍了如何利用Excel中的Power Query工具免费获取并自动刷新股票历史数据,特别适合Excel炒股党。从环境配置、数据源选择到实战操作,手把手教你建立智能数据管道,实现高效投资分析。通过参数化股票代码和定时刷新功能,大幅提升数据更新效率。

weixin_26767391的博客 654

用C#绘图实现动画出现卡屏(运行慢)问题的解决办法

原文:用C#绘图实现动画出现卡屏(运行慢)问题的解决办法正在用C#做一个小游戏,需要用到动画,上次解决的问题是闪烁问题,用双缓冲技术。以为不会有什么问题了。后来当把图片全部绘制上去的时候依然出现了卡屏的问题。这个问题困扰了我将近半个月了。马上就要规定的时间了。而且又是一个五一假期。小盆友们都去玩了。自习室少有的几个人还在上着自习,而我为了解决这个问题。也渡过了苦逼的两天。大早上7:30开始一直到晚...

weixin_34168700的博客 1142

直流有刷电机控制 - 认识电机(一)

电机控制学习

u011030644的博客 917

手动以及使用torch.nn实现前馈神经网络实验

手动以及使用torch.nn实现前馈神经网络 手动实现前馈神经网络解决上述回归、二分类、多分类任务 利用torch.nn解决上述回归、二分类、多分类任务 在多分类任务中使用至少三种不同的激活函数 对多分类任务中的模型评估隐藏层层数和隐藏单元个数对实验结果的影响

m0_52910424的博客 9372

GDI+中drawimage效率低的问题

视频显示中对图片的处理效率要求比较高,当图像的尺寸比较小时,drawimage的绘图效率没问题,但当分辨率高时,视频莫名奇妙的总是卡住。 其实drawimage主要做了两方面的工作,一是图片缩放,二是图片显示。可以自己实现缩放,然后用SetDIBits显示图片。...

atansuozhe的博客 4212

告别卡顿!在RK3588上优化Gstreamer推拉流与RKNN推理的完整Pipeline实战

本文详细介绍了在RK3588平台上优化Gstreamer推拉流与RKNN推理的全链路Pipeline实战。通过解码环节参数调优、RKNN线程管理、内存预分配策略以及编码输出优化,实现60FPS流畅处理与亚秒级延迟。特别针对实时视频分析场景,提供了从rtspsrc到appsink的毫秒级优化方案,助力开发者构建零卡顿的智能视觉系统。

weixin_30698527的博客 484

C# DrawImage函数

C# DrawImage函数

webgis_kf的专栏 2万+

PyQt5开发应聘简历模版

该工具旨在帮助用户对Excel、CSV格式的数据进行快速导入、分析及可视化展示,支持折线图、柱状图、饼图等多种图表类型,提供数据筛选、排序、统计等功能,适用于企业数据分析人员日常工作。:一款用于本地文件管理的桌面应用,支持文件的新建、复制、移动、删除、重命名等基本操作,具备文件搜索、分类整理、批量操作及文件信息查看等功能,提升用户文件管理效率。:熟悉QSS(Qt Style Sheet)样式表,可对PyQt5界面进行个性化美化,包括控件颜色、字体、边框、布局等样式定制,提升应用视觉体验。

ybmzlqzj的博客 83

【ComfyUI报错解决】K采样器 mat1和mat2形状不匹配错误分析与修复 mat1 and mat2 shapes cannot be multiplied (77x2048 and 4096x

如果你在 ComfyUI 里遇到K采样器报错:mat1 和 mat2 shapes cannot be multiplied确认大模型和 LoRA 是否是同一版本(SDXL vs SD1.5,不能混用)。如果用了双 CLIP 加载器,要确认加载的类型和选择的模型类型是否匹配。加载→ 类型选flux加载 SDXL 专用的 clip/t5 → 类型选sdxl避免不同版本模型和 LoRA 混搭,保持一致性。模型+LoRA+CLIP 类型必须保持同一版本,不然就会报错。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2409

使用bitblt提高GDI+绘图的效率

最近在做使用GDI+绘制K线界面发现传统的GDI+绘制方式效率比较低,根本无法满足K线界面及时刷新的速度要求。所以做了个GDI+绘制图形界面的试验,改试验主要在一个600×600的区域内每隔10MS绘制60×60个点,每隔10MS改变其颜色,并记录每次绘制的帧数作为比较GDI+绘图性能的依据(这个界面是摘自网上)在这里定义个一个timer控件,刷新时间设为10ms,tick事件里写入一...

baochahua4445的博客 1297

RK3588平台开发系列讲解(以太网篇)MDIO底层驱动

沉淀、分享、成长,让自己和他人都能有所收获!😄。

内核笔记 6885

c# DrawImage使用时碰到的一些问题。

我在使用c# Graphics类的DrawImage做图像拼接的时候。发现这个方法如果使用的重载方法不对的话,图像拼接会出现问题。 Bitmap bitmapJoint = new Bitmap(width, height); Graphics graph = Graphics.FromImage(bitmapJoint); graph.DrawImage(bitmapJoint, width, height); graph.Clear(System.Drawing.Color.Gray); int c

chulijun3107的博客 2159

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C#高效绘图(转)

双缓冲技术 双缓冲是将图片在显示到DC前,现在要内存建一个DC,也就是用于存储这张图片的内存区,然后在将这部分update到你要显示的地方 这样,可以防止画面抖动很大 这样和你说吧,如果要实现你要的效果,你必须用指针访问内存 比如,把程序声明成unsafe的,然后按照上面的操作进行   this.clear(this.BackColor)不行的 invalida

SunCherryDream的专栏 4万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

提高GDI显示速度

GDI为API调用,应该好用,但有DC等怪异的概念,网上找找别人的程序,比葫芦画瓢,还是能显示图片的。显示内存位图的BitBlt经测试耗时为4.7ms,感觉慢,思来想去,问题应该出在biBitCount = 24的内存位图排列格式上,改为biBitCount = 32提速至3.3ms,内存对齐,拷贝加快。以下为主要实现的源代码。 头文件 class CDrawImg {...

weixin_30878361的博客 420

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

GDI+效率问题与优化

GDI+效率问题与优化 . 分类: 技术笔记 2009-07-05 00:08 1329人阅读 评论(7) 收藏 举报  这周在用GDI+实现图片的动画效果,起初每画一帧都在30-40ms左右,动画效果自然不能令人满意。 困惑了良久,后面在高人的指点下,效率有了显著地提高,最主要是清楚了时间都花在了那里,优化起来也就方便很多。   我现在知道的影响GDI+效率的主要有:

lp2007的专栏 5690
上一篇: modem的at指令集大全
下一篇: 阻尼运动算法在界面编程中的应用
dadahacker
博客等级 码龄20年 78粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值