Как представить битовый массив в холсте в WPF?

Я разделил на подклассы Canvas так, чтобы я мог переопределить Render функция. Я должен знать, как я могу загрузить битовый массив в WPF и рендеринге это к холсту. Я абсолютно плохо знаком с WPF, и я не нашел учебных руководств, которые показывают Вам, как сделать что-то таким образом на вид тривиальное. Пошаговые инструкции с примерами были бы большими.

9
задан Dave Clemmer 18 September 2011 в 03:32
поделиться

3 ответа

Это должно заставить вас начать:

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));
   }
}
11
ответ дан 4 December 2019 в 08:00
поделиться

В WPF редко бывает необходимо переопределить OnRender, особенно если все, что вы хотели сделать, это нарисовать BMP в фоновом режиме:

<Canvas>
    <Canvas.Background>
        <ImageBrush ImageSource="Resources\background.bmp" />
    </Canvas.Background>
    <!-- ... -->
</Canvas>
13
ответ дан 4 December 2019 в 08:00
поделиться

Если вы действительно хотите нарисовать фон холста, я бы рекомендовал использовать ImageBrush в качестве фона , потому что это просто, поскольку вам не нужно создавать подкласс 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>
3
ответ дан 4 December 2019 в 08:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: