WPF使用DrawingContext实现二维绘图

DrawingContext比较类似WinForm中的Graphics 类,是基础的绘图对象,用于绘制各种图形,它主要API有如下几种:

绘图API

绘图API一般形为DrawingXXX系列,常用的基础的绘图API有:

  • DrawEllipse
  • DrawGeometry
  • DrawGlyphRun
  • DrawImage
  • DrawRectangle
  • DrawRoundedRectangle

这些和GDI的API是非常相似的,WPF的API中另外还都有一个带动画的版本,不过一般很少用。

另外还有两个相对用的较少的API:

  • DrawDrawing
  • DrawVideo

其中DrawDrawing还是一个比较强大的API,常用的Drawing对象有GeometryDrawingImageDrawingVideoDrawing,详细内容可参考MSDN文章Drawing 对象概述,熟悉了它们的用法后还是非常有用的。

附加效果API

附加效果API一般形为PushXXX系列,它们分别是:

另外一个可用于设备像素对其的添加参考线API:PushGuidelineSet,其具体用法可参考WPF:基于物理像素的图形绘制这篇文章。

PS:我这里的链接是附的MSDN上关于Drawing的介绍,并不是DrawingContext的API说明,但概念类似,可以直接参考。

需要注意的是,附加效果是对后面的所有操作都生效的,调用多次的话效果会叠加,如果要清除掉效果可以调用Pop函数,连续清除多个效果需要连续调用Pop函数

使用DrawingContext绘图

使用DrawingContext绘图的一个最简单的方式是重载控件的OnRender方法,它就带一个DrawingContext参数,和WinForm中重载OnPaint方法比较类似。

    protected override void OnRender(DrawingContext drawingContext)
    {
        var pen = new Pen(Brushes.Black, 1);
        Rect rect = new Rect(20, 20, 30, 60);
        drawingContext.DrawRectangle(null, pen, rect);
    }

另外,还可以使用更加灵活的DrawingVisual,DrawingGroup等对象创建DrawingContext绘图,在后面再用单独的文章介绍。

最后值得一提的是:虽然DrawingContext和System.Drawing.Graphics 类非常相似,但它们的功能却大相径庭:DrawingContext 用于保留模式图形系统,而 System.Drawing.Graphics 类型则用于即时模式图形系统。 使用DrawingContext 对象的绘图命令时,实际上是在存储一系列呈现指令(但具体的存储机制则取决于提供 DrawingContext 的对象的类型)以供图形系统在以后使用,而不是实时绘制到屏幕上。

到此这篇关于WPF使用DrawingContext实现二维绘图的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • WPF开发之利用DrawingVisual绘制高性能曲线图

    前言 项目中涉及到了心率检测,而且数据量达到了百万级别,通过WPF实现大数据曲线图时,尝试过最基础的Canvas来实现,但是性能堪忧,而且全部画出来也不实际.同时也尝试过找第三方的开源库,但是因为曲线图涉及到很多细节功能,第三方的肯定也没法满足.没办法,只能自己实现,上网查找后发现DrawingVisual这个玩意可以实现高性能画图,同时再搭配局部显示,这样就能实现自己想要的效果.话不多说,今天把大致的实现思路写一下,就不直接把项目的源码贴出来,写个简单的Demo就好了. 正文 1.首先新建个项

  • WPF实现雷达扫描图的绘制详解

    目录 前言 制作思路 具体实现 前言 实现一个雷达扫描图. 源代码在TK_King/雷达 (gitee.com),自行下载就好了 制作思路 绘制圆形(或者称之轮) 绘制分割线 绘制扫描范围 添加扫描点 具体实现 首先我们使用自定义的控件.你可以使用vs自动添加,也可以手动创建类.注意手动创建时要创建Themes/Generic.xaml的文件路径哦. 控件继承自itemscontrol,取名叫做Radar. 我们第一步思考如何实现圆形或者轮,特别是等距的轮. 我们可以使用简单的itemscont

  • WPF基于物理像素绘制图形

    WPF中有一个DrawingContext类,该类提供了很多画法方法,例如DrawLine,DrawText,DrawRectangle等.开发者使用它们可以方便地进行图形绘制.不过,在使用DrawingContext过程中,我发现使用DawLine方法画出的线条在某些部分有些模糊.这个问题的解决,需要一些计算机图形学方面的知识,使用的方法并不是很复杂.不过,这个方法所涉及到的一些过程有些令人费解(好吧,我没有专门学过计算机图形学),本文是我在实践中的一些尝试和经验的总结. 还是从一个例子开始吧

  • WPF使用DrawingContext实现二维绘图

    DrawingContext比较类似WinForm中的Graphics 类,是基础的绘图对象,用于绘制各种图形,它主要API有如下几种: 绘图API 绘图API一般形为DrawingXXX系列,常用的基础的绘图API有: DrawEllipse DrawGeometry DrawGlyphRun DrawImage DrawRectangle DrawRoundedRectangle 这些和GDI的API是非常相似的,WPF的API中另外还都有一个带动画的版本,不过一般很少用. 另外还有两个相对

  • Python绘图之二维图与三维图详解

    各位工程师累了吗? 推荐一篇可以让你技术能力达到出神入化的网站"持久男" 1.二维绘图 a. 一维数据集 用 Numpy ndarray 作为数据传入 ply 1. import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt np.random.seed(1000) y = np.random.standard_normal(10) print "y = %s"% y x =

  • jQuery 生成svg矢量二维码

    jQuery 生成矢量svg二维码,并提供PNG,和SVG的页面下载,减轻服务端的压力. 代码如下所示: <html> <head> <title>jQuery 生成svg矢量二维码</title> </head> <body> <script type='text/javascript' src='http://cdn.staticfile.org/jquery/2.1.1/jquery.min.js'></scr

  • 使用jquery.qrcode生成彩色二维码实例

    jquery.qrcode.js 是居于jquery类库的绘制二维码的插件,用它来实现二维码图形渲染支持canvas和table两种绘图方式.(jquery.qrcode.js 设置显示方式为table时在webkit核心浏览器如chrome下会变形,这个需要注意.) 下面为测试代码(增加了颜色控制,可以设置4个区块的颜色值,需要指定render为table.),效果如下: 代码如下: <html> <head> <title>JS生成二维码</title>

  • Java生成二维码可添加logo和文字功能

    废话不多说,直接给大家贴代码了,具体代码如下所示: package com.luo.wctweb.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.util.Date; imp

  • iOS开发生成二维码图片(附中间带有小图标二维码)

    生成二维码图片也是项目中常用到的,二维码的扫描Git上有很多好用的,这里主要说下二维码的生成 1.普通二维码 1.1 方法 /** 生成二维码 QRStering:字符串 imageFloat:二维码图片大小 */ + (UIImage *)createQRCodeWithString:(NSString *)QRStering withImgSize:(CGFloat)imageFloat; 1.2 方法实现 /** 生成二维码 QRStering:字符串 imageFloat:二维码图片大小

  • C#利用QrCode.Net生成二维码(Qr码)的方法

    现在网上很多应用都是用二维码来分享网址或者其它的信息.尤其在移动领域,二维码更是有很大的应用场景.因为项目的需要,需要在网站中增加一个生成二维码分析网址的功能,在谷歌大幅度抽筋的情况下无奈使用百度.百度N多,找到一些项目,但是可用性不强.(有一个项目是用VS2005开发的,在2010中调试不开.)终于在codeplex上找到一个"神器",这个"神器"可以很方便的生成二维码,速度那是相当的快,并且可支持中文,遵从MIT协议. QrCode.Net是一个使用C#编写的用

  • java实现批量生成二维码

    本文实例为大家分享了java实现批量生成二维码的具体代码,供大家参考,具体内容如下 package com.youge.test; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; im

  • 通过java生成读取二维码详解

    前言 在开始之前,我们需要先引入二维码生成和读取的jar包,这里我用的是qrcodejar 新建一个Java工程,在工程中添加一个lib目录,把两个Jar包放到lib目录下,不要忘了add as libiary 在build.gradle中添加配置 compile fileTree(dir:'lib',include:['*.jar']) (这里我用的是gradle) 准备工作结束,马上开始 生成二维码 public class QRcodeTest { public static void m

  • python 画二维、三维点之间的线段实现方法

    如下所示: from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt # 打开画图窗口1,在三维空间中绘图 fig = plt.figure(1) ax = fig.gca(projection='3d') # 给出点(0,0,0)和(100,200,300) x = [0, 100] y = [0, 200] z = [0, 300] # 将数组中的前两个点进行连线 figure = ax.plot(x, y

随机推荐