精华内容
下载资源
问答
  • 由于WPF采用了设备无关单位,当设备DPI大于系统DPI时,可能会产生像素自动扩展问题,这就导致线条自动向外扩展一个像素,并且与边缘相邻的线条颜色变成了半透明,如下所示: 这种特性在绘制细线条的时候会导致...
    原文:WPF绘制矢量图形模糊的问题

    WPF默认提供了抗锯齿功能,通过向外扩展的半透明边缘来实现模糊化。由于WPF采用了设备无关单位,当设备DPI大于系统DPI时,可能会产生像素自动扩展问题,这就导致线条自动向外扩展一个像素,并且与边缘相邻的线条颜色变成了半透明,如下图所示:

    这种特性在绘制细线条的时候会导致一些我们所不期望的结果:颜色变淡,线条模糊,线条变粗。很多时候,我们是无法绘制一个像素的清晰的线条的。对于这个问题,WPF给我们提供了几种解决方案:

    1、设置像素对齐

    对于系统内置的一些控件,通过设置SnapsToDevicePixels为true,可以非常方便的实现像素对齐。

    这个属性是有继承效果的,只要在父控件上设置了,其所有的子控件都是生效的。但它有时会出现改变窗口大小时线条消失的情况

    2、设置对齐参考线

    方法1只针对系统的内置的一些控件有效,但对于使用DrawingVisual等方式自绘的图形则没有效果。此时可以通过设置参考线解决这一问题。

    简单的示例如下:

    void render(DrawingContext dc)
    {
        var pen = new Pen(Brushes.Black, 1);
        var d = pen.Thickness / 2;
    
        var guidelines = new GuidelineSet(new []{d}, new[]{d});
        dc.PushGuidelineSet(guidelines);
    
        dc.DrawLine(pen, new Point(30, 10), new Point(30, 80));
        dc.DrawLine(pen, new Point(50, 20), new Point(50, 80));
    }

    具体代码参见MSDN:Apply a GuidelineSet to a Drawing,也可以参看这篇文章WPF DrawingContext seems ignore SnapToDevicePixels

     

    3、设置 RenderOptions.EdgeMode="Aliased"

    前面的设置参考线方式效果较好,不过需要编写较多的代码,并且只能适用于水平或垂直的线条。很多时候,我使用的是设置 RenderOptions.EdgeMode="Aliased"(如果在代码中则是使用this.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased)),

    4、设置UseLayoutRounding="True"

    这个是在WPF4后增加的一个选项,用来控制布局舍入的,用来控制图片模糊的效果非常好,用于控制控件的模糊效果也不错的。不过也是对DrawingContext绘制的图形没有效果的。

    小结:WPF的抗锯齿效果在给我们带来的很好的视觉效果的同时,也给我们带来的不少困扰,本文就总结了几种常见的解决方案,希望能对大家的工作带来一点帮助。

    posted on 2019-01-10 13:24 NET未来之路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/10249444.html

    展开全文
  • WPF绘制矢量图问题

    2019-09-04 14:30:02
    现在想给自己矢量图图形增加事件响应,如拖动事件,那么在拖动的过程中有没有办法检测这个图形碰撞了其他图形?
  • WPF程序有时需要适配不同大小的屏幕,图片是像素图的话,拉伸之后会变模糊,影响美观度,因此可以考虑使用矢量图。网上找到了相应的介绍:...

          WPF程序有时需要适配不同大小的屏幕,图片是像素图的话,拉伸之后会变模糊,影响美观度,因此可以考虑使用矢量图。网上找到了相应的介绍:http://learnwpf.com/post/2006/06/04/How-do-I-Include-Vector-Based-Image-Resources-in-my-WPF-Application.aspx。但是里面提到的AI插件不是很好用,相比之下,微软提供的Expression Design 4还是方便些,现在该软件已经免费,可以直接去官网下载。

         1.在Expression Design 4中加载已有的*.ai矢量文件,选中需要转换的图形元素,然后点击File|Export,选择导出xaml文件即可。

       需要注意的地方,如果*.ai文件图层中存在,里面的图形元素是无法正确导出的。需要将其移出到该组外面,再选中导出即可。

     2.按照上面参考链接中的例子,将导出的xaml文件中cavas部分代码复制到ControlTemplate中,如下:

        <ControlTemplate x:Key="CellPhone">
            <Viewbox Stretch="Uniform">
                <Canvas Width="20.008" Height="21.3254" Clip="F1 M 0,0L 20.008,0L 20.008,21.3254L 0,21.3254L 0,0">
                    <Canvas  Width="800.32" Height="599.776" Canvas.Left="0" Canvas.Top="0">
                        <Path Width="20.008" Height="21.3253" Canvas.Left="0" Canvas.Top="-3.05176e-005" Stretch="Fill" Fill="#FF2179BF" Data="..."/>
                    </Canvas>
                </Canvas>
            </Viewbox>
        </ControlTemplate>
    

     3.在原来需要引用图片的地方,引用上述替换xaml即可,如:

    <Button Name="btnCellPhone"  ToolTip="手机">
                    <ContentControl Template="{StaticResource CellPhone}" />
     </Button>
    

      

     

    转载于:https://www.cnblogs.com/KevinJasmine/p/5528273.html

    展开全文
  • 1、https://yq.aliyun.com/articles/678768 2、... 3、https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/graphics-multimedia/how-to-create-a-quadratic-bez...

    1、https://yq.aliyun.com/articles/678768

    2、https://www.cnblogs.com/lonelyxmas/p/10254863.html

    3、https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/graphics-multimedia/how-to-create-a-quadratic-bezier-curve

    4、https://blog.csdn.net/luansxx/article/details/88823467

    5、https://www.cnblogs.com/lonelyxmas/p/10254863.html

    6、https://blog.csdn.net/weixin_30888707/article/details/96313814

    7、https://www.cnblogs.com/hehexiaoxia/p/5316098.html

    8、绘制几何图形 https://www.cnblogs.com/lonelyxmas/p/10254863.html

    9、绘制图标 https://blog.csdn.net/weixin_30888707/article/details/96313814

    10、WPF图形绘制教程 https://wenku.baidu.com/view/a6ed2c0b227916888486d742.html

    11、https://www.cnblogs.com/aihu0307/archive/2011/07/08/2100784.html

    <Path Stroke="#FFE23838" StrokeThickness="5" Width="500" Height="500" StrokeDashArray="2 1" StrokeDashCap="Round">
                        <Path.Data>
                            <GeometryGroup>
                                <PathGeometry Figures="M 100,50 A 100,100 0 0 0 300,50"/>
                                <PathGeometry Figures="M 100,50 L 300,50"/>
                                <!-- M:起点,H:水平直线,300:终点-->
                                <PathGeometry Figures="M 100,50 H 300"/>
                                <!-- M:起点,Q:二次贝塞尔曲线-->
                                <PathGeometry Figures="M 300,50 Q 380,46 380,100"/>


                            </GeometryGroup>
                        </Path.Data>
                    </Path>

    WPF使用Path画圆的一个示例代码

    https://blog.csdn.net/weixin_34392435/article/details/89594715

    <Path Fill="red" Data="M 0,0 A 20,20 45 1 1 0,1 Z"/>

    1. Fill是指Path的填充颜色

    2. Data是Path的路径,

               M 0,0  --画笔移到0,0处;

               A 20,20 --画半径为20的圆弧;

              45 1 1 --- 45为转角角度,1:是否有大小弧,画椭圆时才有用;1:顺时针

              0,1 --- 终点

              Z --- 闭合

     

    13、在线绘制贝塞尔曲线

    http://wx.karlew.com/canvas/bezier/

    14、源代码

    https://www.karlew.com/archives/194

    展开全文
  • WPF开发过程中可能会遇到使用矢量图做展示的情况,很多人或许直接用jpg图片到程序中,但是试图呈现效果肯定不如矢量图。该案例让你知道WPF如何加载使用矢量图
  • 本人的绘图基础实在不敢恭维,于是有个想法,就是可以找人画矢量图,然后导出XAML。有人说AutoCAD比Blend强大很多,可是AutoCAD都有专门的培训学校,看来不是一天两天能学好的,干脆找人做矢量图,做一个不是很复杂...
  • WPF中使用SVG矢量图

    2021-08-03 15:07:06
    WPF原生并不支持svg矢量图。但是WPF原生的形状工具的使用方式与SVG非常相似。 以该图片为例: 这个图片的形状是这样的: 在这段svg代码里面,主体的就是那一段特别长的path标签,它包含的4段“M”开头的数据分别...

    WPF原生并不支持svg矢量图。但是WPF原生的画形状工具的使用方式与SVG非常相似。

    以该图片为例:
    在这里插入图片描述

    这个图片的形状是这样的:
    在这里插入图片描述

    在这段svg代码里面,主体的就是那一段特别长的path标签,它包含的4段“M”开头的数据分别定义了这四个方块。

    而在WPF中,有着用法完全相同的path标签。所以用法也很简单,只要在WPF中创建一段标签,并将这段数据作为“data”的参数填入,就像这样:
    在这里插入图片描述

    但是,这种方法有一个问题:
    在这里插入图片描述

    这段svg代码的对应图形如下:
    在这里插入图片描述

    可以很明显的发现,这段代码和上一个相比,增加了Line、rect两类元素,分别对应的是分隔的横线和内部的两点两横。他们的数据方式也与path截然不同,难以直接转化。

    不过,所幸市面上有很多成熟的矢量图转化(和编辑)软件。例如开源的inkscape。用inkscape打开该svg文件,然后保存为xaml格式,我们就得到了以下代码:

    在这里插入图片描述

    毫无疑问,xaml文件作为WPF本身的主体文件当然是完美符合语法的。

    接下来,只要在WPF中创建一个用户控件,然后用这里的整块代替原本的,就获得了一个矢量的用户控件,可以被别的模块调用。

    ——但是注意,似乎是因为svg和xaml的格式不同,第一是xaml里面对小数点后的数据支持很差,虽然支持小数点后一位,但是实际调整时很可能根本没有变化,或者变化方式不仅离散而且变化临界点很奇怪。 但是在设计器里没法正确显示这个规模的变化(实际运行后是正常修改了的)。

    第二是个别元素的位置会发生奇怪的偏移(可能是因为小数点)。

    因此,需要看着设计界面对元素稍作修正。当然如果从一开始制作的svg就不包含小数点就再好不过了。

    展开全文
  • WPF,关于矢量图

    2013-09-09 11:49:32
    Shape的图,都是矢量图吗,还是只是Path的图才是矢量图
  • 扩展 WPF 动画类

    2019-04-24 13:12:00
    扩展 WPF 动画类 原文:扩展 WPF 动画类 扩展 WPF 动画类 Charles Petzold...
  • WPF学习之绘图和动画

    千次阅读 2014-11-24 21:06:11
    WPF学习之绘图和动画 分类: WPF 2012-11-13 17:51 10107人阅读 评论(10) 收藏 举报 如今的软件市场,竞争已经进入白热化阶段,功能强、运算快、界面友好、Bug少、价格低都已经成为了必备条件。这还...
  • 如果要做下面这样的一个东西作为背景。你会如何做呢?图1. 目标背景效果方案一,用PS出来。然后把这个PNG图片作为背景...方案二,用WPF矢量图绘制。这个方案可以比较容易地解决上面两个问题。但是无论我们用哪种方
  • WPF

    2018-08-01 11:49:53
     SolidColorBrush单色填充指定区域, LinearGradientBrush线性梯度刷,RadialGradientBrush圆形梯度刷,DrawingBrush是图画绘制刷(包括矢量图和位图),ImageBrush是使用图像做刷,而VisualBrush是以可视...
  • 如果要做下面这样的一个东西作为背景。你会如何做呢?...方案二,用WPF矢量图绘制。这个方案可以比较容易地解决上面两个问题。   但是无论我们用哪种方式,都不会把整个图的大小出来。而是是一个最...
  • 本篇将记录一下如何在WPF中绘画和设计动画,这方面一直都不是VS的强项,然而它有一套利器Blend;这方面也不是我的优势,幸好... 在WPF中可以绘制矢量图,不会随窗口或图型的放大或缩小出现锯齿或变形,除此之外,XAM
  • WPF用户界面中,可以通过形状(Shape)来绘制直线、椭圆、矩形及一些多边形的类。通过这些基本的图像,组合成为复杂的图形。 Shape类中,主要的形状有Rectangle(),Ellipse(),Line,Polyline(),Polygon(),Path(),...
  • WPF-18:绘图和动画

    2018-04-28 17:12:59
    矢量图(Vector Image):无论怎样放大/缩小都不会出现锯齿。使用Blend可以直接绘制XAML图像;Design可以像Photoshop或Fireworks那样绘制图形,再由设计者决定导出为png或XAML格式。WPF的基本图形包括以下几个(都是...
  • WPF包含数据模板和控件模板,其中控件模板又包括ControlTemplate和ItemsPanelTemplate。 其实WPF的每一个控件都有一个默认的模板,该模板描述了控件的外观以及外观对外界刺激所做出的反应。我们可以自定义一个模板来...
  • Blend作为专门的设计工具让WPF如虎添翼,即能够帮助不了解编程的设计师快速上手,又能够帮助资深开发者快速建立图形或者动画的原型。 1.1 WPF绘图 与传统的.net开发使用GDI+进行绘图不同,WPF拥有自己的一套绘图...
  • 在许多用户框架中(特别是WPF之前的框架,如Windows窗体和MFC),开发人员必须从头构建自己的动画系统。最常用的技术是结合使用计时器和一些自定义的绘图逻辑。WPF通过自带的基于属性的动画系统,改变了这种情况。接...
  • 深入WPF中的图像刷 ImageBrush 之2——ImageBrush的铺设方式

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,515
精华内容 606
关键字:

wpf画矢量图