C#WPF用户控件中,WPF界面中传入一张图片,如何根据给定的像素点和像素宽高在图片上画一个矩形框并且该矩形框边框显示为红色
时间: 2024-12-17 19:56:32 浏览: 93
在C# WPF中,如果你想要在用户控件里动态地在图片上绘制一个带红边框的矩形,你可以使用`DrawingVisual`、`DrawingContext`以及`ImageBrush`等组件。以下是一个简单的步骤:
1. 创建一个UserControl,并添加一个`Canvas`作为容器。
```xml
<Grid>
<Canvas x:Name="DrawingCanvas" Width="{Binding ActualWidth}" Height="{Binding ActualHeight}"/>
</Grid>
```
2. 使用`DrawingVisual`和`DrawingContext`来绘制矩形。在你的UserControl的`OnInitialized`或相关的事件处理程序中,创建并初始化它们:
```csharp
private DrawingVisual _drawingVisual;
private DrawingContext _drawingContext;
public override void OnInitialized()
{
base.OnInitialized();
_drawingVisual = new DrawingVisual();
_drawingContext = _drawingVisual.RenderOpen();
// 添加图片到Canvas
var imageBrush = new ImageBrush(new BitmapImage(new Uri("path_to_your_image.jpg", UriKind.RelativeOrAbsolute)));
DrawingCanvas.Child = new Rectangle { RenderTransformOrigin = new Point(0.5, 0.5), Stroke = Brushes.Red, StrokeThickness = 2, Fill = imageBrush };
}
```
在这段代码中,我们首先创建了`DrawingVisual`和`DrawingContext`,然后设置`Canvas`的`Child`为一个包含`ImageBrush`的`Rectangle`。`ImageBrush`加载图片,而矩形的`Stroke`属性设定为红色,`StrokeThickness`指定了边框宽度。
3. 如果你想让矩形按照给定的像素点(x, y),宽度和高度绘制,你需要在代码中计算对应的位置。例如:
```csharp
// 假设你有一个Point pixelPoint和两个double pixelWidth, pixelHeight
var rectTopLeft = new Point(pixelPoint.X - pixelWidth / 2, pixelPoint.Y - pixelHeight / 2);
var rectSize = new Size(pixelWidth, pixelHeight);
Rectangle rectangle = new Rectangle
{
RenderTransformOrigin = rectTopLeft,
Stroke = Brushes.Red,
StrokeThickness = 2,
Fill = imageBrush,
Width = rectSize.Width,
Height = rectSize.Height,
Left = rectTopLeft.X,
Top = rectTopLeft.Y
};
```
然后将`rectangle`替换到上面的代码中`DrawingCanvas.Child`处。
4. 当你想要更新矩形位置或大小时,只需更新对应的`DrawingCanvas`属性即可。
阅读全文
相关推荐

















