是否有人完成了从wpf Pen到gdi+ one的完全转换?
一开始听起来并不复杂:使用带有相应画笔的构造函数。但是有很多小细节:不同的画笔( wpf中的5个,gdi+中的5个,不同的名称、属性等)和笔属性本身。
也许有很多简单的解决方案,比如ToString()/Parse() one,或者通过序列化,或者是专门的方法或隐藏类。不想走很长的路,走错了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 ...)
{
...
}
}发布于 2014-10-07 15:32:59
您不能从WPF笔转换为GDI笔,反之亦然,因为它们是两个完全不同的绘制窗口的系统。最好的方法是创建一个新的笔,其属性尽可能接近原始笔。
原因是WPF不使用GDI绘制窗口内容(尽管存在WPF/GDI互操作情况)。相反,WPF使用自己的呈现器,如果我在Direct2D和Direct3D上没有弄错的话。因此,WPF中的笔与GDI中的笔是不同的,在GDI中,笔作为实际的图形绘制原语对象存在。
如果您需要使用GDI笔作为现有WPF笔的对应项,那么除了编写一堆if或switch驱动的代码来设置和返回新的System.Drawing.Pen对象之外,您没有太多的选择。没有别的办法可以绕过它了。
https://stackoverflow.com/questions/25603347
复制相似问题