2010-01-30 84 views
9

我已經子類Canvas,以便我可以覆蓋它的Render函數。我需要知道如何在WPF中加載位圖並將其呈現到畫布上。我對WPF完全陌生,我還沒有找到任何教程來向你展示如何做一些看似微不足道的事情。帶示例的逐步說明會很棒。如何在WPF中將位圖呈現到畫布中?

回答

11

這應該讓你開始:

class MyCanvas : Canvas { 
    protected override void OnRender (DrawingContext dc) { 
     BitmapImage img = new BitmapImage (new Uri ("c:\\demo.jpg")); 
     dc.DrawImage (img, new Rect (0, 0, img.PixelWidth, img.PixelHeight)); 
    } 
} 
3

如果你想畫的畫布的背景下,我會建議使用ImageBrushBackground,「怎麼是你不需要繼承Canvas覆蓋Onender這很簡單。

但我給你的,你問什麼是演示源代碼:

創建一個類(我把它叫做ImageCanvas

using System.Windows; 
    using System.Windows.Controls; 
    using System.Windows.Media; 

    namespace WpfApplication1 
    { 
     public class ImageCanvas : Canvas 
     { 
      public ImageSource CanvasImageSource 
      { 
       get { return (ImageSource)GetValue(CanvasImageSourceProperty); } 
       set { SetValue(CanvasImageSourceProperty, value); } 
      } 

      public static readonly DependencyProperty CanvasImageSourceProperty = 
       DependencyProperty.Register("CanvasImageSource", typeof(ImageSource), 
       typeof(ImageCanvas), new FrameworkPropertyMetadata(default(ImageSource))); 

      protected override void OnRender(System.Windows.Media.DrawingContext dc) 
      { 
       dc.DrawImage(CanvasImageSource, new Rect(this.RenderSize)); 
       base.OnRender(dc); 
      } 
     } 
    } 

現在你可以使用它像這樣:

<Window x:Class="WpfApplication1.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfApplication1" Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <local:ImageCanvas CanvasImageSource="/Splash.png"> 
      <TextBlock Text="Hello From Mihir!" /> 
     </local:ImageCanvas> 
    </Grid> 
</Window> 
11

在WPF那就是你需要重寫OnRender特別是如果你想要做的一切都畫一個BMP的背景難得一遇:

<Canvas> 
    <Canvas.Background> 
     <ImageBrush ImageSource="Resources\background.bmp" /> 
    </Canvas.Background> 
    <!-- ... --> 
</Canvas>