gpt4 book ai didi

c# - 将 System.Windows.Media.Pen 转换为 System.Drawing.Pen

转载 作者:太空狗 更新时间:2023-10-29 20:39:18 27 4
gpt4 key购买 nike

有没有人完成了从 wpf Pen 到 gdi+ one 的完整转换?

乍一看并不复杂:使用带有相应画笔的构造函数。但是有很多 细节:不同的画笔(wpf 中有 5 个,gdi+ 中有 5 个,具有不同的名称、属性等)以及画笔属性本身。

也许有很多简单解决方案,例如ToString()/Parse() 一个或通过序列化或可能是一个专用方法或隐藏类(class)。不想走很长一段错误的 if(type is ...) 方式。

这是一种可能的方法(用于演示,可能行不通)

using System.Windows.Media;
using GDI = System.Drawing;

public static GDI.Pen ToGDI(this Pen pen)
{
var brush = pen.Brush;
var thickness = pen.Thickness;
if(brush is SolidColorBrush)
{
var color = ((SolidColorBrush)brush).Color;
return new GDI.Pen(new GDI.SolidBrush(Colors.FromArgb(color.A, color.R, color.G, color.B)), (float)thickness);
}
else if(brush is ...)
{
...
}
}

最佳答案

您不能从 WPF 笔转换为 GDI 笔,反之亦然,因为它们是两个完全不同的系统,用于绘制到窗口。您能做的最好的事情就是创建一个属性尽可能接近原始笔的新笔。

原因是 WPF 不使用 GDI 绘制窗口内容(尽管存在 WPF/GDI 互操作情况)。相反,如果我没记错的话,WPF 使用自己的渲染器 Direct2D 和 Direct3D。因此,WPF 中的笔与 GDI 中的笔不同,GDI 中它作为实际的图形绘制基元对象存在。

如果您需要 GDI 笔作为现有 WPF 笔的对应物,您实际上别无选择,只能编写一堆 ifswitch 驱动代码来设置和返回新的 System.Drawing.Pen 对象。别无他法。

关于c# - 将 System.Windows.Media.Pen 转换为 System.Drawing.Pen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25603347/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com