C# 绘制UWP的视觉等效图
我有一个人的位图图像,我想在这个人的脸上画一个矩形。我有矩形的坐标(x,y,宽度,高度)。像这样:C# 绘制UWP的视觉等效图,c#,wpf,uwp,C#,Wpf,Uwp,我有一个人的位图图像,我想在这个人的脸上画一个矩形。我有矩形的坐标(x,y,宽度,高度)。像这样: 如果我使用WPF,那么我可以使用DrawingVisual和DrawingContext类来实现这一点。不幸的是,它们在UWP中不可用。是否有任何等效的API可用,或者可能有一个NuGet包来实现相同的功能?我提出的一个解决方案是将图像包含在网格中,并将项控件作为面板模板绑定到一组矩形和画布上: <Grid> <Image Source="{Binding Image}
如果我使用WPF,那么我可以使用
DrawingVisual
和DrawingContext
类来实现这一点。不幸的是,它们在UWP中不可用。是否有任何等效的API可用,或者可能有一个NuGet包来实现相同的功能?我提出的一个解决方案是将图像包含在网格中,并将项控件
作为面板模板绑定到一组矩形和画布上:
<Grid>
<Image Source="{Binding Image}" />
<ItemsControl ItemsSource="{Binding Rectangles}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Helper:BindingHelper.CanvasLeftBindingPath" Value="Left" />
<Setter Property="Helper:BindingHelper.CanvasTopBindingPath" Value="Top" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Rectangle Width="{Binding Width}"
Height="{Binding Height}"
Stroke="{Binding Color}"
StrokeThickness="6">
</Rectangle>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
由于UWP不支持样式设置器中的绑定
,因此我不得不使用绑定助手。更多关于这方面的信息可以在这里找到
我正在使用'WriteableBitmapEx'Nuget包解决此问题。
更多信息是
示例代码:
private async void BrowseButton_Click(object sender, RoutedEventArgs e)
{
//FileOpePicker
var openDlg = new FileOpenPicker();
openDlg.FileTypeFilter.Add(".jpg");
openDlg.FileTypeFilter.Add(".jpeg");
openDlg.FileTypeFilter.Add(".png");
//Open file selection window
var result = await openDlg.PickSingleFileAsync();
if (result == null || !result.IsAvailable) return;
var file = await StorageFile.GetFileFromPathAsync(result.Path);
var property = await file.Properties.GetImagePropertiesAsync();
//Create bitmap from image size
var writeableBmp = BitmapFactory.New((int)property.Width, (int)property.Height);
using (writeableBmp.GetBitmapContext())
{
//Load bitmap from image file
using (var fileStream = await file.OpenAsync(FileAccessMode.Read))
{
writeableBmp = await BitmapFactory.New(1, 1).FromStream(fileStream, BitmapPixelFormat.Bgra8);
}
}
//find face that DetectAsync Face API
using (var imageFileStream = await file.OpenStreamForReadAsync())
{
var faces = await faceServiceClient.DetectAsync(imageFileStream);
if (faces == null) return;
//display rect
foreach (var face in faces)
{
writeableBmp.DrawRectangle(face.FaceRectangle.Left, face.FaceRectangle.Top,
face.FaceRectangle.Left + face.FaceRectangle.Width,
face.FaceRectangle.Top + face.FaceRectangle.Height, Colors.Red);
}
}
FacePhoto.Source = writeableBmp;
}
您是否检查了以下链接?是的,我是否遗漏了任何内容?通过阅读发布的链接,我发现UWP使用了一些类似windows的系统。*
命名空间,因此我假设它应该能够与windows系统中的工作方式类似。我提到的WPF类来自System.windows.Media
在UWP中不可用的命名空间。Windows运行时中没有类似DrawingVisual的命名空间。在图像控件的顶部放置一个矩形或一个带有矩形几何体的路径。您是否可以为这个问题添加绑定助手?我想这会很有帮助的!