VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > 批处理教程 >
  • 深入浅出 WPF教程之WPF中,如何使用图像API进行绘

WPF中,如何使用图像API进行绘制而不是XAML?

首先,由于WPF中不象GDI+中有Graphics对象,因此你无法使用Graphics进行绘图了,取而代之的是:DrawingContext;类似地,GDI+中的OnPaint已被OnRender取代。
其次,UIElement有一个OnRendar方法,它的定义是:
protected virtual void OnRender (
DrawingContext drawingContext
)
 

但我们不能直接调用OnRender方法,也不能直接创建DrawingContext实例,但可以利用 DrawingGroup.Open 和DrawingVisual.RenderOpen。
这里举两个例子:
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();
}
 




相关教程