2010-01-30 20 views
9

Tôi đã phân loại Canvas để tôi có thể ghi đè chức năng Render của nó. Tôi cần phải biết làm thế nào tôi có thể tải một bitmap trong WPF và render rằng để canvas. Tôi hoàn toàn mới với WPF và tôi đã không tìm thấy bất kỳ hướng dẫn nào cho bạn thấy làm thế nào để làm điều gì đó dường như tầm thường. Hướng dẫn từng bước với các ví dụ sẽ tuyệt vời.Làm cách nào để hiển thị bitmap thành canvas trong WPF?

Trả lời

11

Điều này sẽ giúp bạn bắt đầu:

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

Nếu bạn muốn vẽ nền của vải, tôi sẽ khuyên bạn sử dụng ImageBrush như Background, 'coz đó là đơn giản như bạn không cần phải phân lớp Canvas để ghi đè Onender.

Nhưng tôi sẽ cung cấp cho bạn một bản demo mã nguồn cho những gì bạn đã hỏi:

Tạo một lớp (tôi đã gọi nó là 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); 
      } 
     } 
    } 

Bây giờ bạn có thể sử dụng nó như thế này :

<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

Trong WPF nó là một trường hợp hiếm hoi mà bạn sẽ cần phải ghi đè OnRender đặc biệt là nếu tất cả các bạn muốn làm là vẽ một BMP tới một nền:

<Canvas> 
    <Canvas.Background> 
     <ImageBrush ImageSource="Resources\background.bmp" /> 
    </Canvas.Background> 
    <!-- ... --> 
</Canvas> 
Các vấn đề liên quan