應(yīng)用WPF圖像API正確方法講解
如何使用WPF圖像API來(lái)進(jìn)行繪制,在實(shí)際使用中是經(jīng)常要用到的一個(gè)技巧。作為一個(gè)初學(xué)者來(lái)說(shuō),掌握這一技巧的應(yīng)用對(duì)以后的學(xué)習(xí)有非常重要的作用。#t#
首先,由于WPF中不象GDI+中有Graphics對(duì)象,因此你無(wú)法使用Graphics進(jìn)行繪圖了,取而代之的是:DrawingContext;類(lèi)似地,GDI+中的OnPaint已被OnRender取代。
其次,UIElement有一個(gè)OnRendar方法,它的定義是:
- protected virtual
void OnRender ( - DrawingContext
drawingContext - )
但我們不能直接調(diào)用OnRender方法,也不能直接創(chuàng)建DrawingContext實(shí)例,但可以利用 DrawingGroup.Open 和DrawingVisual.RenderOpen。
這里舉兩個(gè)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);
- //畫(huà)矩形
- dc.DrawRectangle(Brushes
.Red, new Pen(Brushes.Blue, 1),- new Rect(new Point(20, 20),
new Size(100, 100)));- //畫(huà)文字
- 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();- // 畫(huà)矩形
- Rect rect = new Rect(new
Point(160, 100), new Size(320, 80));- drawingContext.DrawRectangle
(Brushes.LightBlue, (Pen)null, rect);- // 畫(huà)文字
- 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對(duì)象,以保存圖片
- RenderTargetBitmap renderBitmap =
new RenderTargetBitmap((int)this.Width,
(int)this.Height, 96, 96,
PixelFormats.Pbgra32);- renderBitmap.Render(drawingVisual);
- // 利用JpegBitmapEncoder,
對(duì)圖像進(jìn)行編碼,以便進(jìn)行保存- JpegBitmapEncoder encoder =
new JpegBitmapEncoder();- encoder.Frames.Add(BitmapFrame.
Create(renderBitmap));- // 保存文件
- FileStream fileStream =
new FileStream(fileName,
FileMode.Create, FileAccess.ReadWrite);- encoder.Save(fileStream);
- // 關(guān)閉文件流
- fileStream.Close();
- }
以上就是WPF圖像API進(jìn)行繪制的相關(guān)方法介紹。