C#WPF用户控件中,WPF界面中传入一张图片,如何根据给定的像素点和像素宽高截取一个矩形框并且该矩形框边框显示为红色
时间: 2024-12-17 20:56:16 浏览: 11
在C# WPF中,要在用户控件中实现这个功能,首先你需要在XAML中设置一个接受图片的`Image`元素,然后在C#背后处理图像的截取和边框颜色。以下是简单的步骤:
1. 在XAML中添加一个`Image`控件:
```xml
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Image Name="ImageSource" Source="{Binding ImageFilePath}" Stretch="UniformToFill" />
<Canvas x:Name="SelectionCanvas" Background="Transparent">
<Rectangle Name="SelectionBorder" Stroke="Red" StrokeThickness="2" Fill="Transparent" />
</Canvas>
</Grid>
</UserControl>
```
2. 在C#中,定义用户控件,并绑定`ImageSource`:
```csharp
public partial class ImageSelectionControl : UserControl
{
public string ImageFilePath { get; set; }
public ImageSelectionControl()
{
InitializeComponent();
}
}
```
3. 当你需要截取和显示矩形时,可以在方法中处理:
```csharp
public void SetSelection(double left, double top, double width, double height)
{
// 更新矩形的位置和尺寸
SelectionBorder.Width = width;
SelectionBorder.Height = height;
SelectionBorder.X = left;
SelectionBorder.Y = top;
// 图片源的矩形区域
var bitmap = Imaging.CreateBitmapSourceFromStream(new FileStream(ImageFilePath, FileMode.Open));
var rectangleRegion = new Region(new Rect(left, top, width, height));
// 根据选定区域复制图片到新的流
using (var memoryStream = new MemoryStream())
{
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap((int)bitmap.PixelWidth, (int)bitmap.PixelHeight, 96, 96, PixelFormats.Pbgra32);
renderTargetBitmap.Render(bitmap, rectangleRegion);
renderTargetBitmap.Save(memoryStream, PngFormat.Png);
memoryStream.Seek(0, SeekOrigin.Begin);
// 将截取后的图片赋值给ImageSource的Source属性,替换原图
ImageSource.Source = new BitmapImage(new Uri("data:image/png;base64," + Convert.ToBase64String(memoryStream.ToArray())));
}
}
```
在这个例子中,`SetSelection`方法接收左上角坐标和宽度高度作为参数,然后在`SelectionCanvas`上绘制红色边框,并从原始图片中截取指定矩形部分。
阅读全文