首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将System.Windows.Media.Pen转换为System.Drawing.Pen

将System.Windows.Media.Pen转换为System.Drawing.Pen
EN

Stack Overflow用户
提问于 2014-09-01 10:02:57
回答 1查看 1.5K关注 0票数 7

是否有人完成了从wpf Pen到gdi+ one的完全转换?

一开始听起来并不复杂:使用带有相应画笔的构造函数。但是有很多小细节:不同的画笔( wpf中的5个,gdi+中的5个,不同的名称、属性等)和笔属性本身。

也许有很多简单的解决方案,比如ToString()/Parse() one,或者通过序列化,或者是专门的方法或隐藏类。不想走很长的路,走错了if(type is ...)的路。

这里有一个可能的方法(演示,可能不起作用)

代码语言:javascript
复制
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 ...)
    {
        ...
    }
}
EN

回答 1

Stack Overflow用户

发布于 2014-10-07 15:32:59

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

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

如果您需要使用GDI笔作为现有WPF笔的对应项,那么除了编写一堆ifswitch驱动的代码来设置和返回新的System.Drawing.Pen对象之外,您没有太多的选择。没有别的办法可以绕过它了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25603347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档