笔记:DrawingContext和GDI+对比简介

news2024/9/21 16:35:41

一、目的:分享一个wpf中级控件,鼠标放上展开其他控件的效果

        DrawingContext 和 GDI+ 的 Graphics 类都是用于绘图的技术,但它们属于不同的图形库和框架,适用于不同的场景。让我们详细比较一下这两者。

二、对比


DrawingContext


        DrawingContext 是 WPF(Windows Presentation Foundation)中的一个类,用于创建和渲染矢量图形。它是 DrawingVisual 类的一部分,通常用于高效的图形绘制。


优点


1.    硬件加速:WPF 使用 DirectX 进行渲染,能够利用 GPU 进行硬件加速,提供更高的性能。
2.    矢量图形:支持矢量图形,能够在不同分辨率下保持高质量。
3.    集成性:与 WPF 的其他功能(如数据绑定、样式和动画)无缝集成。
4.    高效:DrawingContext 是轻量级的,适合用于需要高效绘制的大量图形对象。


示例代码
以下是一个使用 DrawingContext 绘制简单图形的示例:

        DrawingVisual drawingVisual = new DrawingVisual();
        using (DrawingContext drawingContext = drawingVisual.RenderOpen())
        {
            drawingContext.DrawRectangle(Brushes.Blue, null, new Rect(50, 50, 100, 100));
            drawingContext.DrawText(
                new FormattedText(
                    "Hello, WPF!",
                    System.Globalization.CultureInfo.InvariantCulture,
                    FlowDirection.LeftToRight,
                    new Typeface("Verdana"),
                    32,
                    Brushes.White),
                new Point(60, 60));
        }

        RenderTargetBitmap bmp = new RenderTargetBitmap(200, 200, 96, 96, PixelFormats.Pbgra32);
        bmp.Render(drawingVisual);

        // Save the bitmap to a file
        PngBitmapEncoder encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bmp));
        using (var stream = new System.IO.FileStream("output.png", System.IO.FileMode.Create))
        {
            encoder.Save(stream);
        }

GDI+ (System.Drawing)


        GDI+ 是 .NET Framework 中的图形库,主要用于 Windows Forms 应用程序。它提供了丰富的绘图功能,适用于位图图形的创建和操作。


优点


1.    广泛支持:GDI+ 在 Windows 平台上有广泛的支持,适用于各种类型的应用程序。
2.    丰富的功能:提供了丰富的绘图功能,包括绘制图形、文本、图像等。
3.    易于使用:API 设计简单易用,适合快速开发。


示例代码
以下是一个使用 GDI+ 绘制简单图形的示例: 

        Bitmap bitmap = new Bitmap(200, 200);
        using (Graphics g = Graphics.FromImage(bitmap))
        {
            g.Clear(Color.White);
            g.FillRectangle(Brushes.Blue, 50, 50, 100, 100);
            g.DrawString("Hello, GDI+", new Font("Verdana", 16), Brushes.White, new PointF(60, 60));
        }

        // Save the bitmap to a file
        bitmap.Save("output.png", System.Drawing.Imaging.ImageFormat.Png);

对比总结


•    性能:DrawingContext 使用硬件加速,性能通常优于 GDI+,特别是在需要高效绘制大量图形对象的场景。


•    图形类型:DrawingContext 适合矢量图形,GDI+ 适合位图图形。


•    集成性:DrawingContext 与 WPF 集成更好,支持数据绑定、动画等功能;GDI+ 更适合 Windows Forms 应用。


•    平台支持:GDI+ 在 Windows 平台上有更广泛的支持,而 DrawingContext 主要用于 WPF 应用。


选择建议


•    WPF 应用:如果你在开发 WPF 应用并需要高效的矢量图形绘制,DrawingContext 是更好的选择。
•    Windows Forms 应用:如果你在开发 Windows Forms 应用并需要操作位图图形,GDI+ 更适合。 

需要了解的知识点 

DrawingContext Class (System.Windows.Media) | Microsoft Learn

DrawingVisual Class (System.Windows.Media) | Microsoft Learn 

Graphics 类 (System.Drawing) | Microsoft Learn 

System.Windows.Controls 命名空间 | Microsoft Learn

控件库 - WPF .NET Framework | Microsoft Learn

WPF 介绍 | Microsoft Learn

XAML概述 - WPF .NET | Microsoft Learn

Windows Presentation Foundation 简介 - WPF .NET | Microsoft Learn

使用 Visual Studio 创建新应用教程 - WPF .NET | Microsoft Learn

源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

了解更多

适用于 .NET 8 的 WPF 的新增功能 - WPF .NET | Microsoft Learn

适用于 .NET 7 的 WPF 的新增功能 - WPF .NET | Microsoft Learn

System.Windows.Controls 命名空间 | Microsoft Learn

Reference Source

Sysinternals - Sysinternals | Microsoft Learn

Windows app development documentation - Windows apps | Microsoft Learn

欢迎使用 Expression Blend | Microsoft Learn

https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/?view=netdesktop-7.0&WT.mc_id=MVP_380318

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2152802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ArcGIS微课1000例】0121:面状数据共享边的修改方法

文章目录 一、共享边概述二、快速的修改办法1. 整形共享边2. 修改边3. 概化边缘一、共享边概述 面状数据共享边指的是两个或多个面状数据(如多边形)共同拥有的边界。在地理信息系统(GIS)、三维建模、大数据分析等领域,面状数据共享边是描述面状空间数据拓扑关系的重要组成…

C / C++的内存管理

前言 Hello,我又回来了,今天我们将继续学习C部分,今天我们将承接前面的知识,继续学习C的内存管理,今天的内容较为重要,所以我们废话不多说,我们还是按例三连上车,开始我们今天内容&…

【图灵完备 Turing Complete】游戏经验攻略分享 Part.4 处理器架构

比较有难度的一个部分。 运算单元ALU,其实就是通过OP选择计算方式,然后选通某个计算,之后输出。每个计算逐个实现就行了。 下面是一个优化占地面积的ALU,变得紧凑了一点。 下面是一个简单的OP选通原理线路。判断是立即数寻址&…

吹爆吊打 GPT-4 的大模型新王者Reflection 70B,是否言过其实?

引言 一觉睡西天,谁知梦里乾坤大。只身眠净土,只道其中日月长。 小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖铁观音的小男孩。今天这篇小作文主要介绍这几天网上狂吹的开源新晋王者Reflection 70B,该模型…

【医疗大数据】医疗保健领域的大数据管理:采用挑战和影响

选自期刊**《International Journal of Information Management》**(IF:21.0) 医疗保健领域的大数据管理:采用挑战和影响 1、研究背景 本研究的目标是调查阻止医疗机构实施成功大数据系统的组织障碍,识别和评估这些障碍,并为管理…

Qemu开发ARM篇-1、环境搭建篇

文章目录 1、目标2、欢迎来到qemu世界3、开发环境4、依赖安装5、编译安装qemu 1、目标 我们的目标是在x86平台上搭建上arm开发环境,及在x86平台模拟一台arm设备,以达到能快速在x86平台上学习arm相关知识,如uboot启动、kernel开发调试等&…

实时美颜的技术突破:视频美颜SDK与直播美颜工具的开发详解

如今,视频美颜SDK和直播美颜工具的开发,为各类应用提供了技术支持,使得美颜效果更加智能、高效。本文将详细探讨实时美颜的技术突破及其在视频美颜SDK和直播美颜工具中的应用与开发。 一、视频美颜SDK的核心技术 1.人脸检测与特征点识别 视…

稀土抗紫外屏蔽剂在涂层中的应用

稀土抗紫外屏蔽剂的主要作用是有效地吸收或阻挡紫外线,从而保护材料或表面免受紫外线的伤害,延长其使用寿命。 稀土抗紫外屏蔽剂在涂层上的应用具有以下显著优势: 1. 增强涂层的耐久性:稀土抗紫外屏蔽剂能够有效吸收和散射紫外线…

Linux常用命令(部分学习待继续补充)

pwd print working directory 打印当前的工作目录 / 根目录 ls list 列出当前目录下的所有文件 ls / ls -h(human) ls -l(long) cd change directory 更改目录 cd … 回到上一级目录 ls list ls -l 会列出文件的详细信息 第一个字符是-表示普通文件 d表示是一个目录 rwx read …

load jsonl File with OpenAI API request results to pandas data.frame

题意:将包含 OpenAI API 请求结果的 jsonl 文件加载到 pandas DataFrame 中 问题背景: I have a large data set containing around 500k observation. It has a string variable that I want to create an embedding for. I used the OpenAI API to cr…

【练习15】拼三角

链接&#xff1a;A-拼三角_牛客小白月赛32 (nowcoder.com) 分析&#xff1a; 三角形的三个边a、b、c必须满足条件&#xff1a;ab>c,ac>b,bc>a 可以先将输入的六个数按从小到大排序&#xff0c;然后再枚举。 因为已经排好序了&#xff0c;如果第一行ab<c&#xff0c…

LeetCode2414题: 最长的字母序连续子字符串的长度(原创)

【题目描述】 字母序连续字符串 是由字母表中连续字母组成的字符串。换句话说&#xff0c;字符串 "abcdefghijklmnopqrstuvwxyz" 的任意子字符串都是 字母序连续字符串 。 例如&#xff0c;"abc" 是一个字母序连续字符串&#xff0c;而 "acb" 和…

Linux启动流程,0,1,2进程,init进程,idle进程,内核态到用户态的kernel_execve(一)

&#xff1f;是&#xff0c;如果定义了&#xff0c;就按Makefile的&#xff0c;如果如下make编译时&#xff0c;就按如下 linux内核入口 进程0在用户空间看不到&#xff0c;因为他是内核进程 进程2就是守护进程&#xff0c;维护内涵运转的 一生二&#xff0c;二生三&#xff…

【网络安全的神秘世界】攻防环境搭建及漏洞原理学习

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 Kali安装docker 安装教程 PHP攻防环境搭建 中间件 介于应用系统和系统软件之间的软件。 能为多种应用程序合作互通、资源…

2021的OWASP TOP 10

OWASP&#xff08;开放Web应用安全项目&#xff09;是一个非营利性组织&#xff0c;旨在提高软件安全性。 每四年一个更新&#xff0c;2025年就会再次更新&#xff0c;到时候这篇文章也会实时更新。 我主要从定义&#xff0c;场景&#xff0c;原因&#xff0c;影响&#xff0…

特征工程与交叉验证在机器学习中的应用

数据入口&#xff1a;学生考试表现影响因素数据集 - Heywhale.com 本数据集提供了关于影响学生考试成绩的多种因素的全面概述。数据集包含了有关学习习惯、出勤率、家长参与、资源获取等方面的信息。 数据说明 字段名说明Hours_Studied每周学习的小时数Attendance出勤率&…

【2024研赛】【华为杯E题】2024 年研究生数学建模比赛思路、代码、论文助攻

思路将在名片下群聊分享 高速公路应急车道紧急启用模型 高速公路拥堵现象的原因众多&#xff0c;除了交通事故外&#xff0c;最典型的就是部分路段出现瓶颈现象&#xff0c;主要原因是车辆汇聚&#xff0c;而拥堵后又容易蔓延。高速公路一些特定的路段容易形成堵点&#xff0…

2024年华为杯数学建模研赛(B题) 建模解析| 网络吞吐量 |小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮2000人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;实现综合建模。独创复杂系统视角&#xff0c;帮助你解决研赛的难关呀。 完整内容可…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(二)-索引

场景 首先介绍测试的场景&#xff0c;本文schema定义 pdm文档索引&#xff0c;包括nested&#xff0c;扩展字段&#xff0c;文档属性扩展&#xff0c;其中_content字段是组件保留字段&#xff0c;支持文本内容 索引 索引服务索引的操作&#xff0c;包括构建&#xff0c;put …

计算机缺少vcruntime140.dll的解决方法,共有7种简单有效的方法

电脑出现找不到vcruntime140.dll,无法继续执行代码的情况&#xff0c;其实有很多原因。而且解决起来还是比较简单&#xff0c;主要是你要了解这个dll文件&#xff0c;今天小编就来给大家详细的分析一下找不到vcruntime140.dll的多种解决方法。 一、 问题概述 找不到vcruntime…