如何使用WPF图像API来进行绘制,在实际使用中是经常要用到的一个技巧。作为一个初学者来说,掌握这一技巧的应用对以后的学习有非常重要的作用。#t#
首先,由于WPF中不象GDI+中有Graphics对象,因此你无法使用Graphics进行绘图了,取而代之的是:DrawingContext;类似地,GDI+中的OnPaint已被OnRender取代。
其次,UIElement有一个OnRendar方法,它的定义是:
- protected virtual
void OnRender ( - DrawingContext
drawingContext - )
但我们不能直接调用OnRender方法,也不能直接创建DrawingContext实例,但可以利用 DrawingGroup.Open 和DrawingVisual.RenderOpen。
这里举两个WPF图像API的使用例子:
(1)自定义绘制Canvas:
- using System;
- using System.Collections
.Generic;- using System.Text;
- using System.Windows.Controls;
- using System.Windows.Media;
- using System.Windows;
- using System.Globalization;
- namespace BrawDraw.Com.Test
- {
- class CanvasCustomPaint :
Canvas- {
- protected override void
OnRender(DrawingContext dc)- {
- base.OnRender(dc);
- //画矩形
- dc.DrawRectangle(Brushes
.Red, new Pen(Brushes.Blue, 1),- new Rect(new Point(20, 20),
new Size(100, 100)));- //画文字
- dc.DrawText(new FormattedText
("Hello, World!", CultureInfo.
CurrentCulture,- FlowDirection.LeftToRight, new
Typeface("Arial"), 40, Brushes.
Orange),- new Point(50,60));
- }
- }
- }
(2)保存图片到文件:
- protected void SavePhoto
(string fileName)- {
- DrawingVisual drawingVisual =
new DrawingVisual();- DrawingContext drawingContext =
drawingVisual.RenderOpen();- // 画矩形
- Rect rect = new Rect(new
Point(160, 100), new Size(320, 80));- drawingContext.DrawRectangle
(Brushes.LightBlue, (Pen)null, rect);- // 画文字
- drawingContext.DrawText(
- new FormattedText("Hello, world",
- CultureInfo.GetCultureInfo("en-us"),
- FlowDirection.LeftToRight,
- new Typeface("Verdana"),
- 36, Brushes.Black),
- new Point(100, 60));
- drawingContext.Close();
- // 利用RenderTargetBitmap对象,以保存图片
- RenderTargetBitmap renderBitmap =
new RenderTargetBitmap((int)this.Width,
(int)this.Height, 96, 96,
PixelFormats.Pbgra32);- renderBitmap.Render(drawingVisual);
- // 利用JpegBitmapEncoder,
对图像进行编码,以便进行保存- JpegBitmapEncoder encoder =
new JpegBitmapEncoder();- encoder.Frames.Add(BitmapFrame.
Create(renderBitmap));- // 保存文件
- FileStream fileStream =
new FileStream(fileName,
FileMode.Create, FileAccess.ReadWrite);- encoder.Save(fileStream);
- // 关闭文件流
- fileStream.Close();
- }
以上就是WPF图像API进行绘制的相关方法介绍。