GDI+中创建离屏缓冲位图的性能问题

WIN32GDI双缓冲技术实现2D射击游戏 GDI,全称为图形设备接口(Graphics Device Interface),是Windows操作系统中负责图形显示和输出的重要组成部分。它作为应用程序和显示设备之间的桥梁,允许开发者以独立于设备的方式编写代码,实现各种图形和文字的输出。GDI使得开发者可以忽略不同显示硬件之间的差异,专注于图像逻辑的实现。双缓冲技术是指在计算机图形绘制中使用两块内存区域作为缓冲。一块被称为“前台缓冲”,直接用于显示;另一块则作为“后台缓冲”,用于图形的生成和预处理。 阅读详情

 

在GDI+中,使用Bitmap创建一个离屏缓冲,必须要使用以下构造函数版本:

Bitmap::Bitmap(INT width, INT height, Graphics* target)

而不要使用以下构造函数版本:

Bitmap::Bitmap(INT width, INT height, PixelFormat format)

否则,在调用Graphics::DrawImage把位图绘制到屏幕表面时,会有严重的性能下降。

我以下列几种PixelFormat尝试过后者:

PixelFormat24bppRGB

PixelFormat32bppRGB

PixelFormat32bppARGB

在我的机器上(thinkpad T60 + Vista Ultimate SP2  with Aero enabled),CPU占用为20%~40%,其中80%时间消耗在把离屏位图绘制到屏幕上这一句(还是只绘制需要重绘的区域):

g.DrawImage(

m_pBackBuffer,

rcDestination,

rcDestination.X,

rcDestination.Y,

rcDestination.Width,

rcDestination.Height,

UnitPixel);

但同样的程序,只是把构造函数改为前者,CPU占用直线下降到1%~5%,这一句的运行时间所占比例也降到可以忽略不计(10%左右)。

传入的Graphics必须是与屏幕表面兼容的。可以通过如下方法得到:

Graphics* pGraphics = Graphics::FromHWND(GetSafeHwnd());

m_pBackBuffer = new Bitmap(cx, cy, pGraphics);

delete pGraphics;

pGraphics = NULL;

 

结论:不要轻易放弃,有时候你认为不可能的事情,其实是你不了解。多用头脑想一下,也许你就能得到更完美的结果。

实现GDI+双缓冲图片放大镜效果的详细教程 GDI+(图形设备接口)是Windows操作系统中的一个组件,它提供了丰富的接口用于处理图形对象如图像、文字、路径等。作为GDI(图形设备接口)的升级版,GDI+在功能和性能上都有了大幅度的提升。通过使用GDI+,开发者可以在应用程序中实现复杂的图形和图像处理功能,如颜色管理、坐标变换和矢量图形绘制等。在进行图形绘制时,尤其是在游戏或动画应用中,经常会遇到画面闪烁或者撕裂的问题。这些问题的出现,很大程度上是因为绘制操作没有在显示输出的垂直同步期间完成。 阅读详情

相关推荐

C# WinForm项目:GDI+与双缓冲绘制正弦波形图

图形用户界面(GUI)编程是现代软件开发中不可或缺的一部分。它通过提供视觉元素使用户能够与软件进行交互,提高了用户体验。在众多的图形库中,GDI+(Graphics Device Interface Plus)是Microsoft为其.NET框架提供的一套用于处理图形的API。GDI+在Windows平台上被广泛用于2D图形绘制,包括位图、文本、线段、形状和其他图形对象。在图形用户界面(GUI)中,双缓冲(Double Buffering)技术是一种减少或消除绘图过程中的视觉闪烁和画面撕裂现象的技术。

weixin_34064233的博客 967

什么是离屏表面

离屏表面是你永远看不到的表面(所谓离屏),它通常被用来存放位图。通常的做法是把离屏表面上的位图用Blt的方法贴到后台表面,后台表面再flip(翻转)为前台表面。把一个东西移到屏幕可显示区外,通常,使用Blt时,需要装图片的控件可见才行,但是有时不想让别人看到,就可以将控件移到屏幕外,但是理论上是不可见的,因为总在屏幕之外。这很有用。 离屏表面应该也叫离屏缓存,包括内存(后备缓存)和显存。

u011429003的专栏 1094

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

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

GDI+ 创建图像

从内存中创建图像     创建一个空的图像可以利用其构造函数来完成[C#]Bitmap myImage = new Bitmap(,);[VB]Dim MyImage = new Bitmap(,)这种方法是利用缺省的颜色深度参数;于指定的颜色深度参数,可以在构造函数指定像素参数.[C#]Bitmap myImage = n

pbcao的专栏 1911

用GDI自绘闹钟 双缓冲+多线程

表盘界面全部用GDI画图函数完成。采用了双缓冲技术,减小了表盘重绘时的闪烁现象。报时功能采用了多线程技术。

视频编解码——视频编解码器工作原理

目录什么是视频编解码器为什么需要视屏编解码器视频编码器与数字视频容器时评编码器的历史 什么是视频编解码器 简单来说就是用于压缩或解压数字视频的软件或硬件 编码是信息从一种形式或格式转换为另一种形式的过程,解码是编码的反向。 适用于视频 编码是将视频、音频的原始格式的文件通过压缩技术转换成另一种格式(视频如h.264,h.265,m-jpeg等)。 解码是编码的反向过程。应用中,一般是将h.264,h.265格式数据解码成如YUV格式裸流交给显示器显示。 为什么需要视屏编解码器 需要在有限的带宽或存储空间

路人coder 1万+

windows GDI+ 离屏绘制文字图片

windows GDI+ 离屏绘制文字图片 由于之前都是在linux开发界面,转到windows还真不适应,然后开发工具是VS2015,目的就是不需要把图片文 字绘制到界面上,而是绘制到一张透明图上,方便我们对图片进行操作。之前也在网上搜索过相关资料,确实挺少 的,现在把实现的功能分享给大家,省的大家走弯路。 1. 创建 bitmap 以及 graphic句柄 m

c553110519的专栏 2282

modelsim软件安装教程及踩坑(极简版)

1.安装的网盘链接:链接:https://pan.baidu.com/s/1ltUfssyXlCnqDmLhWyhlwA提取码:jery 2.步骤(参考博文):https://blog.youkuaiyun.com/weixin_42693097/article/details/90523692?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163521788716780357213801%2522%252C%2522scm%2522%253A%2522

subtitle_的博客 3780

各种图像处理类库的比较及选择(The Comparison of Image Processing Libraries)

作者:王先荣 前言 近期需要做一些图像处理方面的学习和研究,首要任务就是选择一套合适的图像处理类库。目前较知名且功能完善的图像处理类库有OpenCv、EmguCv、AForge.net等等。本文将从许可协议、下载、安装、文档资料、易用性、性能等方面对这些类库进行比较,然后给出选择建议,当然也包括我自己的选择。   许可协议 类库 许可协议 许可协议网址 大致介绍 ...

weixin_34391854的博客 303

MATLAB信号处理实战:VMD分解参数调优全指南(附避坑技巧)

本文深入探讨了MATLAB中变分模态分解(VMD)的核心参数调优实战技巧。针对模态数K和惩罚系数α的选择难题,提供了从经验估计、可视化观察到量化指标辅助的渐进式调优框架,并分享了避免过分解与欠分解的实用避坑指南,旨在帮助工程师高效处理非平稳信号,提取清晰的物理特征。

weixin_29079671的博客 144

数据科学常见模型总结(二)-倾向性得分匹配模型

PSM的核心思想是从未受干预的用户群体中,找到和干预对象一模一样的用户,这样就可以把因果效应归因到干预上。

wudelong0112的专栏 4889

图像绘制与离屏渲染

目录 0 iOS 图片显示原理.... 1 1什么是离屏渲染.... 2 2哪些操作会触发离屏渲染?. 3 3 UIImageView... 3 4 圆角处理.... 3 5 CPU 限制 VS GPU 限制.... 4 6异步绘图.... 5 7 CALayer. 5 参考资源.... 5       0 iOS 图片显示原理    iOS从磁盘加载

bravegogo的专栏 2589

YOLOv26与其他目标检测算法的对比分析

本文对YOLOv26与其他主流目标检测算法进行了全面对比分析。YOLOv26在COCO数据集上达到96.0% mAP@0.5和79.0% mAP@0.5:0.95,显著优于其他YOLO系列算法,同时保持85FPS的推理速度和35MB的轻量级模型。相比两阶段算法(如Faster R-CNN),YOLOv26在速度、模型大小和内存占用方面优势明显;相比Anchor-free算法(如CenterNet),YOLOv26在速度和模型压缩方面更优。其核心创新包括动态锚框分配、自注意力机制和轻量级设计,使其成为适用于复

一键难忘的博客 993

GDI+ 防止闪屏(双缓冲)

 Bitmap m_BGImage( DesRect.Width, DesRect.Height ); SolidBrush brush(Color::White); Graphics g(&m_BGImage); g.FillRectangle(&brush,DesRect); g.DrawImage(&img, DesRect); g.ReleaseHDC(g.GetHDC()); Graphics graphics(m_CurPicture.GetDC()->GetSafeHdc()); graphi

558

vue2/3 - H5 移动端网页中调用手机摄像头扫描二维码 / 条形码功能,在h5手机网页里调起相机摄像头进行二维码或条形码扫描效果详细教程(详细示例组件源码,一键复制开箱即用!)

vue扫描二维码条形码,vue网页调用摄像头扫二维码条形码,vue移动端如何实现调用相机扫描二维码,vue移动端扫一扫功能,vue怎么做移动端h5扫一扫功能,vue识别二维码和条形码,vue实现点击按钮调用摄像头扫码,vue调用本地摄像头实现拍照功能,Vue中如何进行二维码生成与扫描,如何实现vue在手机浏览器中调用摄像头实现扫描二维码功能,VUE项目移动端H5调用摄像头扫码,vue项目中实现H5调取摄像头,网页调用摄像头实现二维码扫描功能,vue调用手机摄像头,vue在调用摄像头扫码,vue自定义打开摄像

✅ 精选推荐文章 1万+

060、模型蒸馏:把扩散模型压进单步的魔法

《端侧文生图模型蒸馏实战:从32步到1步的优化之道》摘要:针对边缘设备部署难题,本文分享了扩散模型蒸馏的核心经验。通过重构损失函数(感知损失+对抗训练+KL散度)、优化采样轨迹截取策略和改造学生模型架构,成功将Stable Diffusion压缩至单步推理。关键发现包括:小批量训练更有效、标签平滑保障生成多样性、双模型策略平衡质量与速度。在Cortex-A53芯片上实现300ms内生成,内存占用控制在200MB以下。特别强调工业部署需权衡压缩率与稳定性,建议保留迭代模式开关以适配不同场景需求。

2601_95651806的博客 150

035-Windows抓屏-GDI

GDI(Graphics Device Interface)抓屏基于Windows系统提供的图形设备接口,通过设备上下文(DC)实现屏幕内容捕获。

zhengtianzuo的博客 1427

简单VASP计算INCAR设置(结构优化OPT、静态自洽SCF、能带BAND、态密度DOS)

改变 K 点、NBANDS、晶胞、ENCUT、POTCAR、自旋或 SOC 后要检查兼容性。该参数不参与物理计算,因此不会改变总能量、受力、应力或最终结构。如果研究的是金属、磁性材料、表面、二维材料、分子、缺陷、DFT+U、杂化泛函或强自旋轨道耦合体系,部分参数必须调整。适合已经用 IBRION = 2 预优化、力较小、自由度较多的结构。在 IBRION = 1、2、3 中,它只是内部缩放因子。“不能修改”不是程序禁止修改,而是修改后会改变理论模型、数值精度或能量参考,使结果不能直接比较。

weixin_51420530的博客 124

GDI双缓冲技术绘图

C#双缓冲绘图技术:提升图形性能与用户体验 目录: 1. 引言 2. C#中的绘图技术 - 单缓冲绘图 - 双缓冲绘图 3. 双缓冲绘图的优势 4. 实现双缓冲绘图的步骤 5. 示例代码 - 创建双缓冲窗体 - 在双缓冲窗体上绘制图形 6. 总结

没有黑科技 1140

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

计算机控制技术及应用

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

Windows GDI编程与双缓冲技术实战指南

图形设备接口(GDI)是Windows系统核心图形子系统,通过设备上下文(DC)管理实现屏幕/打印机等设备的图形渲染。其核心原理是通过消息驱动机制响应WM_PAINT等绘图事件,采用对象化绘图模型(画笔/画刷/位图)完成2D图形输出。在数据可视化、自定义控件开发等场景中,GDI配合双缓冲技术能有效解决画面闪烁问题:通过在内存DC预渲染完整帧,再通过BitBlt一次性输出到显示设备。现代开发中常与Direct2D等硬件加速方案配合使用,平衡开发效率与渲染性能需求。

angou6476的博客 448

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Visual C++双缓冲绘图实战:彻底解决GDI/GDI+界面闪烁问题

在桌面图形编程中,图形设备接口(GDI)是Windows平台的基础绘图技术。其核心原理是通过设备上下文(DC)管理图形输出,但单缓冲模式下直接向屏幕DC绘制会导致图像撕裂和闪烁,这是因为绘制与显示同步进行,中间状态被用户感知。双缓冲技术通过引入内存位图作为后台缓冲区,将所有绘图操作先在内存中完成,再通过BitBlt函数一次性传输到屏幕,从而消除视觉闪烁,极大提升了图形界面的流畅度和用户体验。这项技术在数据可视化、工业控制面板、实时监控系统等需要动态更新的应用场景中尤为重要。本文以Visual C++和MFC

weixin_26934905的博客 312

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Windows GDI技术手册

介绍了Windows GDI相关的API及概念。

2401_82413779的博客 1400

c语言双缓冲怎么用,C语言游戏编程:GDI怎么实现双缓冲绘图去掉闪烁

在上篇文章中将我要用 C语言重新写一个俄罗斯方块 ,使用的是GDI的绘图模式(目前正在移植到DX上去,想添加一些更好友好的动画)。数据与动画分离,动画的帧率保持在30左右。但是绘图的时候画面出现了强烈的闪动。 排查了一下原因,不是由于电脑性能的原因(在上篇文章中将我要用C语言重新写一个俄罗斯方块,使用的是GDI的绘图模式(目前正在移植到DX上去,想添加一些更好友好的动画)。数据与动画分离,动画的帧...

weixin_33783283的博客 1156

GDI+效率问题与优化

这周在用GDI+实现图片的动画效果,起初每画一帧都在30-40ms左右,动画效果自然不能令人满意。困惑了良久,后面在高人的指点下,效率有了显著地提高,最主要是清楚了时间都花在了那里,优化起来也就方便很多。 我现在知道的影响GDI+效率的主要有:1、DrawImage,比起BitBlt实在差的不是一点点,解决的方法就是用BitBlt替换DrawImage。2、PixelFor

I Habit I DO 8189

Windows GDI、GDI+ 绘图 闪烁问题

 “闪烁”的原因是擦除背景(用背景色重新填充)与绘制前景图像之间有时间差,而且背景和前景颜色有差异,导致眼睛看上去好像在闪烁。 “闪烁”并不主要是因为GDI或GDI+效率低造成的。 解决这个问题需从两个方面入手:1.缩短(或消除)前后景绘图时间差,2.减少绘制次数 1.缩短(或消除)前后景绘图时间差 OnEraseBkgnd(CDC* pDC) {     return TR

wangdong770909027的博客 3705

Windows GDI画刷深度解析:从创建、使用到性能优化实战

在Windows图形编程中,图形设备接口(GDI)是进行界面绘制和图形处理的基础框架。其核心原理在于通过设备上下文(DC)统一管理绘图资源,实现高效的图形输出。画刷(Brush)作为GDI的关键对象之一,负责封闭区域的填充,直接影响程序的视觉效果和性能表现。在工程实践中,合理使用画刷能显著提升界面流畅度,避免资源泄漏。常见的应用场景包括窗口背景填充、控件绘制、图表渲染以及游戏界面开发等。本文聚焦于GDI画刷的实战技巧,深入探讨实心画刷、阴影画刷、图案画刷等不同类型的特点,并针对资源管理和性能优化提供具体解决

weixin_30567225的博客 357
上一篇: 《领域驱动设计》看完留念
下一篇: 100 - The 3n + 1 problem
BalonFan
博客等级 码龄26年 47粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值