如何在WPF中将位图渲染到画布?

时间:2010-01-30 15:33:17

标签: c# .net wpf canvas bitmapimage

我已经将Canvas子类化,以便我可以覆盖其Render函数。我需要知道如何在WPF中加载位图并将其渲染到画布。我是WPF的新手,我没有找到任何教程向您展示如何做一些看似微不足道的事情。带有示例的分步说明会很棒。

3 个答案:

答案 0 :(得分:13)

在WPF中,极少数情况下您需要覆盖OnRender,尤其是如果你想要做的就是将BMP绘制到后台:

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

答案 1 :(得分: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));
   }
}

答案 2 :(得分:3)

如果您确实要绘制画布的背景,我建议您使用ImageBrush作为Background,因为您不需要继承Canvas来覆盖{{1} }。

但是我会给你一个演示源代码,用于你所问的:

创建一个类(我称之为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);
            }
        }
    }