我在图像控件中有一个位图图像
每次我用鼠标点击它,在我点击鼠标的地方,我需要在位图上画一条红线。
我首先想到创建一个Line对象,但发现,我无法添加Line。我需要一块帆布。但是如果我将我的图像放在画布上,我的位图就不会覆盖整个画布(我发现,位图的坐标确定了画布上的位置,所以我的位图显示错误。)
然后我尝试使用图形
Graphics graphics = Graphics.FromImage(bitmapImg);
graphics.DrawLine(new System.Drawing.Pen(System.Drawing.Color.Red), 0, 0, bitmapImg.Width, bitmapImg.Height); //not the line yet, just for testing
graphics.DrawImage(bitmapImg, 0, 0, bitmapImg.Width,bitmapImg.Height);
graphics.Dispose();
但是,我没有在我的位图上画任何东西........
现在我想,我可能必须将位图放入数组中,然后更改像素颜色以获取位图中的线条。我相信,这会很慢。
我现在正在尝试使用visualDrawing,但是,我还没有让它工作: - (
在WPF C#中获取现有位图的一个好方法是什么?以及如何删除它?
我很乐意提供任何帮助!谢谢!我已经在MS论坛页面上发布了它,但到目前为止还没有答案。
答案 0 :(得分:4)
执行Graphics.FromImage
时,此Graphics
类(以及System.Drawing.Pen
)不属于WPF,它们是WinForms的一部分,它们在内部使用Windows的GDI +调用绘制并无法在WPF上绘制。
如果编译代码的第一行时没有出错,那么bitmapImg
可能是System.Drawing.Image
(来自WinForms)而不是来自WPF的图像控件({{1} })。
正如adrianm所说,最简单的方法可能是使用网格:
System.Window.Controls.Image
然后,在您的点击事件处理程序中,您可以使该行可见并为其指定所需的坐标:
<Grid>
<Image Source="your image" />
<Line Name="line" Visibility="Hidden" Stroke="Red" StrokeThickness="1" />
</Grid>
答案 1 :(得分:0)
您可以将背景透明的画布放在BitmapImage顶部,然后根据需要绘制线条。 xaml文件中的代码:
<Grid>
<Image Source="C:\Users\sm143444\Desktop\download.jpg" />
<Canvas Background="Transparent" x:Name="draw" />
</Grid>
来自Xaml.cs的代码:
public MainWindow()
{
InitializeComponent();
Point startPoint = new Point(50, 50);
Line newLine = new Line();
newLine.Stroke = Brushes.Black;
newLine.Fill = Brushes.Black;
newLine.StrokeLineJoin = PenLineJoin.Bevel;
newLine.X1 = startPoint.X;
newLine.Y1 = startPoint.Y;
newLine.X2 = startPoint.X + 100;
newLine.Y2 = startPoint.Y + 100;
newLine.StrokeThickness = 2;
this.draw.Children.Add(newLine);
}
或者您甚至可以在图像和线条中添加ZIndex,以便将它们放置在画布上的不同图层上。