在 WPF 中,在附加到 canvas 的位图上绘制线条和 PNG 的正确方法是什么?
In WPF what is the proper method for drawing a line and PNGs on a bitmap that is attached to a canvas?
我不再对 WPF 做那么多了,而且我似乎总是对最基本的东西感到茫然。我试过谷歌,但没有用。
我有一个 canvas(也许我不应该使用 canvas?),我想附上一张图片。我能找到的唯一方法是这样的:
<Canvas Grid.Column="2" HorizontalAlignment="Right" Height="822" VerticalAlignment="Top" Width="1198" Name="MainCanvas">
<Canvas.Background>
<ImageBrush ImageSource="/MapDesignModule;component/MapFrame.bmp" Stretch="None" AlignmentY="Top" AlignmentX="Right"/>
</Canvas.Background>
</Canvas>
现在,我需要在附加到 canvas 的图像上画线(稍后我还必须在图像上放置透明的 PNG 或白色设置为 Alpha 0 的 BMP)。
过去,我会从 image.source 获得一个可写位图,但您显然不能从 ImageBrush 获得它?
什么是 'proper way' 将图像放在屏幕上并在其上绘制和 blit 图像?
只需将多个 Image 和 Line 元素放在一个公共面板中,例如一个 Canvas:
<Canvas>
<Image Source="/MapDesignModule;component/MapFrame.bmp" />
<Image Source="/MapDesignModule;component/Overlay.png" />
<Line X1="100" Y1="100" X2="200" Y2="200" Stroke="Black" />
</Canvas>
您还可以为 Canvas
指定一个名称
<Canvas x:Name="canvas">
在后面的代码中访问它:
canvas.Children.Add(new Image
{
Source = new BitmapImage(new Uri(
"pack://application:,,,/MapDesignModule;component/MapFrame.bmp"))
});
canvas.Children.Add(new Line
{
X1 = 100,
Y1 = 100,
X2 = 200,
Y2 = 200
});
如果您以后想要添加多个形状叠加层,您可以考虑使用具有适当视图模型的 ItemsControl,例如如下所示:
我不再对 WPF 做那么多了,而且我似乎总是对最基本的东西感到茫然。我试过谷歌,但没有用。
我有一个 canvas(也许我不应该使用 canvas?),我想附上一张图片。我能找到的唯一方法是这样的:
<Canvas Grid.Column="2" HorizontalAlignment="Right" Height="822" VerticalAlignment="Top" Width="1198" Name="MainCanvas">
<Canvas.Background>
<ImageBrush ImageSource="/MapDesignModule;component/MapFrame.bmp" Stretch="None" AlignmentY="Top" AlignmentX="Right"/>
</Canvas.Background>
</Canvas>
现在,我需要在附加到 canvas 的图像上画线(稍后我还必须在图像上放置透明的 PNG 或白色设置为 Alpha 0 的 BMP)。
过去,我会从 image.source 获得一个可写位图,但您显然不能从 ImageBrush 获得它?
什么是 'proper way' 将图像放在屏幕上并在其上绘制和 blit 图像?
只需将多个 Image 和 Line 元素放在一个公共面板中,例如一个 Canvas:
<Canvas>
<Image Source="/MapDesignModule;component/MapFrame.bmp" />
<Image Source="/MapDesignModule;component/Overlay.png" />
<Line X1="100" Y1="100" X2="200" Y2="200" Stroke="Black" />
</Canvas>
您还可以为 Canvas
指定一个名称<Canvas x:Name="canvas">
在后面的代码中访问它:
canvas.Children.Add(new Image
{
Source = new BitmapImage(new Uri(
"pack://application:,,,/MapDesignModule;component/MapFrame.bmp"))
});
canvas.Children.Add(new Line
{
X1 = 100,
Y1 = 100,
X2 = 200,
Y2 = 200
});
如果您以后想要添加多个形状叠加层,您可以考虑使用具有适当视图模型的 ItemsControl,例如如下所示: