应用WPF图像API正确方法讲解
创始人
2024-06-17 21:00:16
0

如何使用WPF图像API来进行绘制,在实际使用中是经常要用到的一个技巧。作为一个初学者来说,掌握这一技巧的应用对以后的学习有非常重要的作用。#t#

首先,由于WPF中不象GDI+中有Graphics对象,因此你无法使用Graphics进行绘图了,取而代之的是:DrawingContext;类似地,GDI+中的OnPaint已被OnRender取代。

其次,UIElement有一个OnRendar方法,它的定义是:

  1. protected virtual 
    void OnRender (  
  2. DrawingContext 
    drawingContext  

但我们不能直接调用OnRender方法,也不能直接创建DrawingContext实例,但可以利用 DrawingGroup.Open 和DrawingVisual.RenderOpen。

这里举两个WPF图像API的使用例子:

(1)自定义绘制Canvas:

  1. using System;  
  2. using System.Collections
    .Generic;  
  3. using System.Text;  
  4. using System.Windows.Controls;  
  5. using System.Windows.Media;  
  6. using System.Windows;  
  7. using System.Globalization;  
  8. namespace BrawDraw.Com.Test  
  9. {  
  10. class CanvasCustomPaint :
     Canvas  
  11. {  
  12. protected override void 
    OnRender(DrawingContext dc)  
  13. {  
  14. base.OnRender(dc);  
  15. //画矩形  
  16. dc.DrawRectangle(Brushes
    .Red, new Pen(Brushes.Blue, 1),   
  17. new Rect(new Point(20, 20), 
    new Size(100, 100)));  
  18. //画文字  
  19. dc.DrawText(new FormattedText
    ("Hello, World!", CultureInfo.
    CurrentCulture,   
  20. FlowDirection.LeftToRight, new 
    Typeface("Arial"), 40, Brushes.
    Orange),  
  21. new Point(50,60));  
  22. }  
  23. }  

(2)保存图片到文件:

  1. protected void SavePhoto
    (string fileName)  
  2. {  
  3. DrawingVisual drawingVisual = 
    new DrawingVisual();  
  4. DrawingContext drawingContext = 
    drawingVisual.RenderOpen();  
  5. // 画矩形  
  6. Rect rect = new Rect(new 
    Point(160, 100), new Size(320, 80));  
  7. drawingContext.DrawRectangle
    (Brushes.LightBlue, (Pen)null, rect);  
  8. // 画文字  
  9. drawingContext.DrawText(  
  10. new FormattedText("Hello, world",  
  11. CultureInfo.GetCultureInfo("en-us"),  
  12. FlowDirection.LeftToRight,  
  13. new Typeface("Verdana"),  
  14. 36, Brushes.Black),  
  15. new Point(100, 60));  
  16. drawingContext.Close();  
  17. // 利用RenderTargetBitmap对象,以保存图片  
  18. RenderTargetBitmap renderBitmap = 
    new RenderTargetBitmap((int)this.Width,
     (int)this.Height, 96, 96, 
    PixelFormats.Pbgra32);  
  19. renderBitmap.Render(drawingVisual);  
  20. // 利用JpegBitmapEncoder,
    对图像进行编码,以便进行保存  
  21. JpegBitmapEncoder encoder = 
    new JpegBitmapEncoder();  
  22. encoder.Frames.Add(BitmapFrame.
    Create(renderBitmap));  
  23. // 保存文件  
  24. FileStream fileStream = 
    new FileStream(fileName, 
    FileMode.Create, FileAccess.ReadWrite);  
  25. encoder.Save(fileStream);  
  26. // 关闭文件流  
  27. fileStream.Close();  
  28. }  

以上就是WPF图像API进行绘制的相关方法介绍。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...