Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绘制UWP的视觉等效图_C#_Wpf_Uwp - Fatal编程技术网

C# 绘制UWP的视觉等效图

C# 绘制UWP的视觉等效图,c#,wpf,uwp,C#,Wpf,Uwp,我有一个人的位图图像,我想在这个人的脸上画一个矩形。我有矩形的坐标(x,y,宽度,高度)。像这样: 如果我使用WPF,那么我可以使用DrawingVisual和DrawingContext类来实现这一点。不幸的是,它们在UWP中不可用。是否有任何等效的API可用,或者可能有一个NuGet包来实现相同的功能?我提出的一个解决方案是将图像包含在网格中,并将项控件作为面板模板绑定到一组矩形和画布上: <Grid> <Image Source="{Binding Image}

我有一个人的位图图像,我想在这个人的脸上画一个矩形。我有矩形的坐标(x,y,宽度,高度)。像这样:


如果我使用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的命名空间。在图像控件的顶部放置一个矩形或一个带有矩形几何体的路径。您是否可以为这个问题添加绑定助手?我想这会很有帮助的!