笔记:DrawingContext和GDI+对比简介
一、目的:分享一个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个人主页-哔哩哔哩视频