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對象有GeometryDrawing,ImageDrawing?,VideoDrawing,詳細內容可參考MSDN文章Drawing 對象概述,熟悉了它們的用法后還是非常有用的。

?

附加效果API

附加效果API一般形為PushXXX系列,它們分別是:

  • PushTransform????????? ? ? ?//變換
  • PushClip????????????  ? ? ? //裁剪
  • PushEffect????????????? ? ? ? ?//位圖效果
  • PushOpacity????????? ? ? ? ??//不透明度
  • PushOpacityMask??? ? ? ? //不透明遮罩

另外一個可用于設備像素對其的添加參考線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?的對象的類型)以供圖形系統在以后使用,而不是實時繪制到屏幕上。

轉載于:https://www.cnblogs.com/TianFang/p/5187568.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458330.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458330.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows系統編程之進程間通信

Windows系統編程之進程間通信作者:北極星2003來源:看雪論壇(www.pediy.com)Windows 的IPC(進程間通信)機制主要是異步管道和命名管道。(至于其他的IPC方式,例如內存映射、郵槽等這里…

前端知識體系收藏

1. 布局框架: Bootstrap: http://getbootstrap.com/ Foundation: http://foundation.zurb.com/ Uikit: http://www.getuikit.com/ Web Components:http://css-tricks.com/modular-future-web-components// 2. 構建工具及包管理器: Grunt: http://gruntjs…

20分鐘快速了解Redis

Redis可以說是目前最火爆的NoSQL數據庫! 過去幾年,Memcached很盛行,現在有很多公司已將Memcached替換成了Redis。當然,很多人替換并不清楚為什么,只是感覺不想讓主流拋棄,這也充分反映了目前Redis的強勢。 …

進程通信例子

from:https://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.beginoutputreadline(vvs.80).aspx?cs-save-lang1&cs-langcsharp#code-snippet-4備注可同步或異步讀取 StandardOutput 流。Read、ReadLine 和 ReadToEnd 等方法對進程的輸出流執行…

IDEA15 下運行Scala遇到問題以及解決辦法

為了讓Scala運行起來還是很麻煩,為了大家方便,還是記錄下來: 1、首先我下載的是IDEA的社區版本,版本號為15. 2、下載安裝scala插件: 2.1 進入設置菜單。 2.2 點擊安裝JetBrains plugin 2.3 輸入scala查詢插件&#xff…

通過掃碼自定義鏈接安裝iOS app,版本更新總結。

1、打包ipa&#xff0c;plist工具&#xff1a;xcode6證書&#xff1a;企業級開發證書 1.1&#xff09;xcode6開始企業級打包時不在生成plist&#xff0c;需要自己編寫&#xff1a;模版見下&#xff1a; <?xml version"1.0" encoding"UTF-8"?><!…

安排與愿想

機器學習的理論學了好久了&#xff0c;對于回歸&#xff0c;分類&#xff0c;聚類&#xff0c;數據的預處理的各種算法也有了深刻認識&#xff1b; 但紙上談兵&#xff0c;沒有意義&#xff1b; 從今天開始用起來吧&#xff0c;把各種算法的實踐以及思路記錄下來&#xff0c;附…

pdf破解版

網頁說明http://aikongke.com/3754.html1118-1805-7284-0295-8107-3663您好 親 看到您拍的寶貝了&#xff01; 鏈接&#xff1a;http://pan.baidu.com/s/1c0iE44C 密碼&#xff1a;bnyc XI版轉載于:https://www.cnblogs.com/computerMatainance/p/5192834.html

使用try-with-resources替代try finally釋放資源

2019獨角獸企業重金招聘Python工程師標準>>> 1、舊社會 Java里&#xff0c;對于文件操作IO流、數據庫連接等開銷非常昂貴的資源&#xff0c;用完之后必須及時通過close方法將其關閉&#xff0c;否則資源會一直處于打開狀態&#xff0c;直至程序停止&#xff0c;增加…

MFC模態對話框和非模態對話框

MFC中對話框有兩種形式&#xff0c;一個是模態對話框&#xff08;model dialog box&#xff09;&#xff0c;一個是非模態對話框&#xff08;modeless dialog box&#xff09;。一、模態對話框&#xff08;model dialog box&#xff09;在程序運行的過程中&#xff0c;若出現了…

平板電腦離壽終正寢還有多遠?

近期有評論稱&#xff0c;因為大尺寸智能手機越來越普及&#xff0c;小尺寸平板正遭受著越來越嚴重的沖擊&#xff0c;在這樣的背景下&#xff0c;平板廠商也紛紛轉攻超大尺寸平板市場&#xff0c;以此避開大尺寸智能手機的競爭&#xff0c;只是。這樣的策略轉變是否能扭轉平板…

Swift 與 JSON 數據

轉載自&#xff1a; http://www.cnblogs.com/theswiftworld/p/4660177.html 我們大家平時在開發 App 的時候&#xff0c;相信接觸最多的就是 JSON 數據了。只要你的 App 有讀取網絡數據的功能&#xff0c;你就免不了要與 JSON 打交道。比如你做一個新聞 App&#xff0c;你要讀取…

TeamViewer - 最好用強大的免費跨平臺遠程桌面控制軟件 (支持電腦和手機)

from&#xff1a;很早以前 LYcHEE 就提到過&#xff0c;家中的潮人爺爺奶奶每天擺弄著電腦&#xff0c;看看新聞發發郵件&#xff0c;安享晚年生活。只是意料之中的&#xff0c;電腦上莫名出現各種問題&#xff1f;不翼而飛的圖標&#xff1f;照片又忘記怎么導出了&#xff1f;…

【設計模式】7、橋接模式

橋接模式就是對一個類的方法進行抽象化&#xff0c;吧不相關的因素提取出來&#xff0c;發展出第二個類 1 package com.shejimoshi.structural.Bridge;2 3 4 /**5 * 功能&#xff1a;橋接模式使用6 * 意圖&#xff1a;將抽象部分與它的實現部分分離&#xff0c;使他們都…

hadoop HA 之 QJM

前言 本文主要通過對hadoop2.2.0集群配置的過程加以梳理&#xff0c;所有的步驟都是通過自己實際測試。文檔的結構也是根據自己的實際情況而定&#xff0c;同時也會加入自己在實際過程遇到的問題。搭建環境過程不重要&#xff0c;重要點在于搭建過程中遇到的問題&#xff0c;解…

TeamViewer免費版和付費版有什么不同

提到遠程控制軟件 TeamViewer無疑是目前業內知名度比較高的一款&#xff0c;所以說到遠程控制軟件可能大部分人首先想到的就是TeamViewer。在使用功能上&#xff0c;它支持遠程桌面控制、文件傳輸、遠程計算機鎖定、視頻會話、主控方和被控方身份互換&#xff0c;遠程管理無人執…

iOS-關于cell的重疊問題

記得很早之前遇到過一個問題&#xff0c;關于cell的重疊問題&#xff0c;現在回顧總結一下。 iOS中tableview的cell顯示是會消耗內存的&#xff0c;如果要顯示無數個cell&#xff0c;不可能把每個cell都存儲下來&#xff0c;為了解決這個問題&#xff0c;cell就用了重用機制&am…

每天一個Linux命令-ls

ls 命令在linux系統中是使用頻率最頻繁的幾個命令之一,直接使用不帶目錄名&#xff0c;是默認顯示當前目錄的文件及子目錄名稱&#xff0c;ls加指定目錄名&#xff0c;則可以查看指定目錄下的文件及子目錄名稱&#xff0c;ls不僅可以查看目錄下有哪些文件和子目錄&#xff0c;還…

halcon資料鏈接

本文轉載自xiamentingtao&#xff0c;原文地址如下&#xff1a; http://blog.csdn.net/xiamentingtao/article/details/52583787 1目錄(?)[]論壇培訓博客文檔書籍視頻論壇、培訓halcon學習網&#xff1a;http://www.ihalcon.com/鳥叔機器視覺&#xff1a;http://bbs.szvbt.com…

【代碼筆記】iOS-翻書效果的實現

代碼&#xff1a; RootViewController.m #import "RootViewController.h"interface RootViewController ()endimplementation RootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self [super initWithNibName:…