D2D引擎与GDI\GDI+绘制效果对比

Windows 2D 绘图 (GDI, GDI+, Direct2D) Windows 2D 绘图GDIGDI 函数GDI+GDI 和 GDI+ 的区别GDI+ 新特性Direct2D视觉效果demo GDI GDI 是 Graphics Device Interface 的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有 Windows 程序的图形输出。 在 Windows 操作系统下,绝大多数具备图形界面的应用程序都离不开 GDI... 阅读详情

本例主要是对比D2D和GDI在绘制文字、线条的区别,以及D2D与GDI+在绘制图片时的区别。

D2D是基于COM组件开发的,使用前的CoInitialize(NULL)是必须的;另外,GDI+的初始化GdiplusStartup()也别忘了。

废话少说,完整代码如下:

// D2DDemo.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "D2DDemo.h"
#include <D2D1.h>
#include <DWrite.h>
#pragma comment(lib, "D2D1")
#pragma comment(lib, "DWrite")
#include <atlbase.h>
#include <atlcom.h>
#include <wincodec.h>
#pragma comment(lib, "windowscodecs")
#include <GdiPlus.h>
#pragma comment(lib, "GdiPlus")
using namespace Gdiplus;


#define MAX_LOADSTRING 100
// 全局变量:
HINSTANCE hInst;								// 当前实例
TCHAR szTitle[MAX_LOADSTRING];					// 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING];			// 主窗口类名

// 此代码模块中包含的函数的前向声明:
ATOM				MyRegisterClass(HINSTANCE hInstance);
BOOL				InitInstance(HINSTANCE, int);
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK	About(HWND, UINT, WPARAM, LPARAM);
BOOL				InitD2DResource();
BOOL				InitDeviceResource(HWND hWnd);
void				D2DDraw();
BOOL				OnCreate(HWND hWnd);
HRESULT				LoadBitmapFromFile(
						   ID2D1RenderTarget *pRenderTarget,
						   IWICImagingFactory *pIWICFactory,
						   PCWSTR uri,
						   UINT destinationWidth,
						   UINT destinationHeight,
						   ID2D1Bitmap **ppBitmap
						   );
//这里来定义全局变量
CComPtr<ID2D1Factory>			g_pD2d1Factory;
CComPtr<IDWriteFactory>			g_pDWriteFactory;
CComPtr<IDWriteTextFormat>		g_pDWriteFormat;
CComPtr<ID2D1HwndRenderTarget>	g_pD2D1HwndRender;
CComPtr<ID2D1GdiInteropRenderTarget>	g_pD2DGdiRender;
CComPtr<IWICImagingFactory>		g_pWicImageFactory;
CComPtr<ID2D1Bitmap>			g_pBkImage;
LOGFONT g_logFont;
HFONT	g_hTextFont	= NULL;
#define FREE_COM_PTR(x)	{ if (x) { x->Release(); x = NULL; } }

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
	UNREFERENCED_PARAMETER(hPrevInstance);
	UNREFERENCED_PARAMETER(lpCmdLine);
	HRESULT hr = CoInitialize(NULL);
	ULONG_PTR ptr;
	GdiplusStartupInput	input;
	GdiplusStartup(&ptr, &input, NULL);
 	// TODO: 在此放置代码。
	MSG msg;
	HACCEL hAccelTable;
	memset(&g_logFont, 0, sizeof(LOGFONT));
	g_logFont.lfHeight	= 40;
	g_logFont.lfWidth	= 0;
	g_logFont.lfWeight	= FW_NORMAL;
	g_logFont.lfCharSet	= DEFAULT_CHARSET;
	g_logFont.lfOutPrecision	= OUT_DEFAULT_PRECIS;
	g_logFont.lfClipPrecision	= CLIP_DEFAULT_PRECIS;
	g_logFont.lfQuality			= DEFAULT_QUALITY;
	g_logFont.lfPitchAndFamily	= DEFAULT_PITCH|FF_SWISS;
	wcscpy(g_logFont.lfFaceName, L"微软雅黑");
	g_hTextFont
C++ GDI+性能瓶颈深度解析与实战优化技巧 在Windows桌面应用开发中,图形设备接口(GDI)及其增强版GDI+是处理图形绘制和图像显示的基础技术。其原理是通过软件渲染路径将绘图指令转换为像素数据,虽然提供了抗锯齿、渐变填充等丰富功能,但在高频刷新和复杂图形场景下容易遇到性能瓶颈。从技术价值看,理解GDI+的托管架构与原生C++之间的交互机制、资源管理模型及渲染管线,能帮助开发者编写出更高效的图形应用程序。常见的应用场景包括数据可视化图表、图像编辑器、实时监控界面等需要动态绘制的桌面软件。本文聚焦于GDI+在C++项目中的效率问题,通过分析**双 阅读详情

相关推荐

Win32 GDI文本输出:TextOut与DrawText核心差异与应用场景详解

在Windows桌面应用开发中,图形设备接口(GDI)是实现文本渲染的基础技术。其核心原理是通过设备上下文(DC)将字符图形化输出到屏幕。TextOut和DrawText作为GDI文本输出的两个关键函数,分别代表了两种不同的技术范式:TextOut提供像素级精确控制,适用于需要动态定位的简单文本绘制;而DrawText则是一个智能排版引擎,支持自动换行、对齐和矩形区域布局,极大简化了复杂文本的显示逻辑。从技术价值看,理解两者的底层机制差异,能帮助开发者在性能、灵活性和代码可维护性之间做出最佳权衡。在实际应用

weixin_30721077的博客 324

C++ SFML图形编程实战:樱花飘落动画效果完整实现指南

在计算机图形学与可视化编程领域,实时动画效果是连接算法逻辑与视觉表现的核心技术。其基本原理是通过连续帧的快速刷新,结合物理模拟与状态更新,实现动态视觉效果。这项技术的工程价值在于将抽象的编程概念转化为直观的交互体验,极大地提升了学习趣味性与项目展示力。常见的应用场景包括游戏开发、数据可视化、交互艺术及教学演示等。本文以C++结合轻量级多媒体库SFML,通过面向对象设计、时间增量动画和随机化控制,完整实现了一个樱花花瓣自然飘落的视觉效果项目。项目中深入应用了对象池优化和deltaTime时间同步等工程实践技巧

weixin_33164198的博客 334

告别卡顿与模糊:Windows 10/11高分辨率屏幕下ArcMap的DPI设置与性能调优全攻略

本文详细解析了Windows 10/11高分辨率屏幕下ArcMap的DPI设置与性能调优方法,帮助GIS工作者解决界面模糊与卡顿问题。从系统级全局设置到ArcMap专属配置,再到性能与画质的平衡技巧,提供了一套完整的优化方案,显著提升ArcGIS在高分屏上的使用体验。

weixin_33726318的博客 360

C# WinForms坦克大战实战:从零构建经典游戏,掌握游戏开发核心原理

游戏开发的核心在于理解游戏循环、对象管理与实时渲染的基本原理。通过面向对象设计,将游戏世界中的坦克、子弹、墙壁等元素抽象为独立对象,每个对象负责自身的状态更新与图形绘制。这种架构模式不仅提升了代码的可维护性,更是理解现代游戏引擎(如Unity)中GameObject与Component设计思想的基石。在实现层面,双缓冲技术能有效解决画面闪烁问题,而轴对齐包围盒(AABB)碰撞检测则是确保游戏交互真实性的关键技术。本文以经典的坦克大战小游戏为实战案例,详细拆解了如何使用C# WinForms与GDI+,从零开

weixin_34059951的博客 336

如何实现LabVIEW界面背景透明与不规则窗口设计

本文详细解析了LabVIEW界面背景透明与不规则窗口设计的实现方法,包括颜色键控透明技术和Alpha通道混合原理。通过原生功能设置和User32.dll调用,开发者可以灵活控制窗口透明度与形状,同时提供实战技巧与性能优化建议,帮助创建高效美观的透明界面。

cuanku6549的博客 407

WIN10系统加载动画模块 二次优化,GDI+D2D 可快速调用-易语言

二次修改,支持WINXP下运行, 增加关闭命令

D2D游戏引擎(3款全)_易语言模块

使用方法:将配套的模块与DLL放到运行程序目录一起即可.比如: 用易语言新建立了一个程序,名称为[新程序.e]那么就放到和它一起的目录,添加模块即可. 搜集不宜,闲分多的请绕行. (包内无任何连接广告,纯绿色)压缩包内包括内容如下: --------------------------------以下为EDgame2d 引擎 D2D.ec 模块正式版本包括: 版本号: 1.0.5.15 大小: 628 kb 版本号: 1.0.5.15 大小: 635 kb 版本号: 1.0.6.20 大小: 652 kb 版本号: 1.0.7.20 大小: 660 kb 版本号: 1.0.7.70 大小: 653 kb 版本号: 1.0.8.70 大小: 664 kb 版本号: 1.0_学习版本 大小: 661 kb 版本号: 2.0_坏少爷完美破解(赞助版) 大小: 307 kb(最新) 版本号: 2.0_竹林深处破解(赞助版) 大小: 307 kb(最新) D2D.ec 模块扩展版本包括: 版本号: 1.0 大小: 83 kb 版本号: 1.1 大小: 86 kb 版本号: 1.2 大小: 91 kb D2D.dll 正式版本包括: 版本号: 1.0.0.1 大小: 952 kb 版本号: 1.0.5.15 大小: 824 kb 版本号: 1.0.6.20 大小: 507 kb 版本号: 1.0.7.20 大小: 417 kb 版本号: 1.0.8.70 大小: 417 kb 版本号: 1.0.8.17 大小: 433 kb 版本号: 1.0.8.28 大小: 418 kb 版本号: 1.0.11.25 大小: 427 kb 版本号: 1.0.6.20 大小: 507 kb 版本号: 1.0.0.1 大小: 846 kb 版本号: 1.0.0.1 大小: 847 kb 版本号: 1.0.0.1 大小: 925 kb 版本号: 1.0.0.1 大小: 957 kb 版本号: 1.0.0.1 大小: 961 kb 版本号: 1.1.2.7 大小: 519 kb(最新) bass.dll 正式版本包括: 版本号: 2.3.0.3 大小为: 91 kb ScriptManager.dll 正式版本包括: 版本号: 未知 大小为: 55kb --------------------------------以下为Galaxy2d 引擎 G2D.ec 版本号:4.102 大小为: 109 kb Galaxy2d.dll 版本号: 未知 大小为: 903 kb star.dll 版本号: 未知 大小为: 102 kb --------------------------------以下为Pge2d 引擎 pge32.ec 版本号: 15.316 大小为: 917kb PGE32.dll 版本号: 15.125.12.12 大小为: 1.72M

D2D引擎 E易言编写

Edgame 2D是为易语言量身打造的一款游戏开发套件,富有特性的中间件,高级组件形式构架.不同功能的模块是互相独立的系统.引擎以易语言模块管理器为核心.支持以第三方插件形式组件增加方式来插入系统工作,构架方式极其灵活,模块效率高. D2D 你仅仅需要关心游戏逻辑,而不需要在意其他的繁琐事务处理。简单化 --- 非常容易使用. D2D为中文编程环境易语言编写,需要一定的易语言基础知识即可.

kettle连接达梦资源库数据库插件

kettle自定义插件plugin database plugin 达梦插件 dm插件

weixin_42122126的博客 2169

HALCON 20.11实战:5步搞定工业图像异常检测(附完整代码)

本文提供了一份基于HALCON 20.11的工业图像异常检测实战指南。通过五个核心步骤——环境准备、数据预处理、模型训练、推理解析与工程化部署,详细演示了如何利用深度学习技术,仅使用正常样本快速构建并优化金属表面划痕等缺陷的检测模型,并附有完整可运行的HDevelop代码,助力工程师实现高效、智能的工业视觉质检。

weixin_29243279的博客 140

WPS和Excel通用!省市区四级联动下拉菜单保姆级教程(附最新行政区划数据包)

本文详细介绍了在WPS和Excel中实现省市区四级联动下拉菜单的完整教程,包含2024年最新行政区划数据的获取与整理方法。通过名称管理器和INDIRECT函数的组合,以及WPS的特色功能,帮助用户高效准确地录入四级行政区划信息,提升数据录入效率并减少错误。

s1t2u3的博客 611

R语言使用caret包的confusionMatrix函数计算混淆矩阵、使用编写的自定义函数可视化混淆矩阵(confusion matrix)

R语言使用caret包的confusionMatrix函数计算混淆矩阵、使用编写的自定义函数可视化混淆矩阵(confusion matrix)

data+scenario+science+insight 3925

StarRC常见问题整理

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?使用starrc_cmd “错误代码”就能看对应Error或Warnning的解释。

m0_61544122的博客 3118

Ubuntu系统等保3级配置核查与加固

虽然这种方法在某些老旧的系统中仍然有效,但现代Linux发行版通常不推荐使用hosts.deny和hosts.allow文件来管理防火墙规则,因为它们的功能已经被更现代的防火墙管理工具(如iptables或firewalld)所取代。如果你想禁止特定的环境变量,可以从这个列表中移除它们,或者如果你想完全阻止所有环境变量的传递,可以将其设置为空。你可以通过ssh-keygen生成密钥对,并将公钥添加到用户的~/.ssh/authorized_keys文件中。修改配置后,需要重启SSH服务以使更改生效。

悦分享 183

DeepCAD: 使用深度自监督学习技术在Python中进行钙成像去噪的全面指南

钙成像是一种用于观察神经活动的技术,通过检测细胞内钙离子的变化来推断神经元的活动。由于其高时空分辨率和对活体组织的适应性,钙成像已经成为神经科学研究中的重要工具。然而,钙成像数据往往伴随着各种噪声,这些噪声可能来自于设备、生物样本或环境。为了获得准确的神经活动信息,去噪是非常关键的。深度自监督学习是一种使用未标记数据进行训练的机器学习方法。与传统的监督学习不同,它不需要大量的标记数据,而是通过学习数据的内部结构和模式来提取有用的特征。DeepCAD是一个基于深度自监督学习的钙成像去噪工具。

qq_38334677的博客 756

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: Windows 2D绘图引擎的发展及联系
下一篇: Python如何安装egg组件
疯狂-的-蜗牛
博客等级 码龄16年 427粉丝 104原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值