應用WPF圖像API正確方法講解
如何使用WPF圖像API來進行繪制,在實際使用中是經(jīng)常要用到的一個技巧。作為一個初學者來說,掌握這一技巧的應用對以后的學習有非常重要的作用。#t#
首先,由于WPF中不象GDI+中有Graphics對象,因此你無法使用Graphics進行繪圖了,取而代之的是:DrawingContext;類似地,GDI+中的OnPaint已被OnRender取代。
其次,UIElement有一個OnRendar方法,它的定義是:
- protected virtual
void OnRender ( - DrawingContext
drawingContext - )
但我們不能直接調(diào)用OnRender方法,也不能直接創(chuàng)建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);
- // 關(guān)閉文件流
- fileStream.Close();
- }
以上就是WPF圖像API進行繪制的相關(guān)方法介紹。