自学内容网 自学内容网

笔记: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个人主页-哔哩哔哩视频


原文地址:https://blog.csdn.net/u010975589/article/details/142417453

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!