Как нарисовать линию на существующем BitmapSource в WPF? - PullRequest
0 голосов
/ 16 августа 2010

Я хотел бы нарисовать линию (или любую геометрическую форму) на существующем объекте BitmapSource в моем приложении WPF. Каков наилучший способ сделать это?

BitmapSource является результатом вызова BitmapSource.Create (...).

Спасибо

  • Ромны

1 Ответ

0 голосов
/ 16 августа 2010

Ниже примера будет отображаться изображение, созданное из BitmapSource с красной линией сверху. Это то, что вы пытаетесь достичь?

XAML:

<Window x:Class="WpfApplication.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid Background="LightBlue">
        <Image Source="{Binding Path=ImageSource}" />
        <Line 
            Stroke="Red" StrokeThickness="10" 
            X1="0" 
            Y1="0" 
            X2="{Binding Path=ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}}" 
            Y2="{Binding Path=ActualHeight, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}}" />
    </Grid>
</Window>

Код:

using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace WpfApplication
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            DataContext = this;
        }

        public BitmapSource ImageSource
        {
            get
            {
                PixelFormat pf = PixelFormats.Bgr32;
                int width = 200;
                int height = 200;
                int rawStride = (width * pf.BitsPerPixel + 7) / 8;
                byte[] rawImage = new byte[rawStride * height];

                Random value = new Random();
                value.NextBytes(rawImage);

                return BitmapSource.Create(width, height, 96, 96, pf, null, rawImage, rawStride);
            }
        }
    }
}
...