在UWP C#中从像素缓冲区转换为图像(仅使用Windows.UI.Xaml)

在UWP C#中从像素缓冲区转换为图像(仅使用Windows.UI.Xaml),c#,image,uwp,buffer,pixel,C#,Image,Uwp,Buffer,Pixel,大家好,我想把像素缓冲区转换成图像并打印出来。这是我在我的程序中拥有的信息: 像素缓冲区:整数宽度、整数高度、整数PTR缓冲区、步幅。由于某些程序集错误,我无法执行此操作: Windows.UI.Xaml.Controls.Image image = new Windows.UI.Xaml.Controls.Image(); System.Windows.Media.Imaging.BitmapFrame frame = System.Windows.Media.Imaging.BitmapFr

大家好,我想把像素缓冲区转换成图像并打印出来。这是我在我的程序中拥有的信息: 像素缓冲区:整数宽度、整数高度、整数PTR缓冲区、步幅。由于某些程序集错误,我无法执行此操作:

Windows.UI.Xaml.Controls.Image image = new Windows.UI.Xaml.Controls.Image();
System.Windows.Media.Imaging.BitmapFrame frame = System.Windows.Media.Imaging.BitmapFrame.Create(System.Windows.Media.Imaging.BitmapSource.Create(
                        (int)pr.pixelBuffer.width,
                        (int)pr.pixelBuffer.height,
                        96,
                        96,
                        System.Windows.Media.PixelFormats.Rgb24,
                        null,
                        pr.pixelBuffer.buffer,
                        (int)(pr.pixelBuffer.stride * pr.pixelBuffer.height),
                        (int)pr.pixelBuffer.stride));
Windows.UI.Xaml.Media.Imaging.BitmapImage bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage(frame.BaseUri);
image.Source = bitmapImage;//frame;
stackPanel.Children.Add(image)
在没有System.Windowxs.Media.Imaging的情况下,有没有办法做到这一点?是否仅使用Windows.UI.Xaml

谢谢

我想把像素缓冲区转换成图像并打印出来

我不确定您的像素缓冲区来自何处,因为您的代码只显示从
pr
obejct获取。在uwp应用程序中 如果您是从实例中获得的,您可能不需要首先获取像素缓冲区,只需将
WriteableBitmap
设置为图像的。和
WriteableBitmap
都可以作为图像源,而不仅仅是
BitmapImage

StorageFile imagefile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/caffe1.jpg"));
WriteableBitmap writeableimage;
using (IRandomAccessStream stream = await imagefile.OpenAsync(FileAccessMode.Read))
{
    SoftwareBitmap softwareBitmap;
    BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
    softwareBitmap = await decoder.GetSoftwareBitmapAsync();
    writeableimage = new WriteableBitmap(softwareBitmap.PixelWidth, softwareBitmap.PixelHeight);
    writeableimage.SetSource(stream);
}
Windows.UI.Xaml.Controls.Image image = new Windows.UI.Xaml.Controls.Image();
image.Source = writeableimage;
stackPanel.Children.Add(image);
如果不是从
WriteableBitmap
,则可能需要创建一个宽度、高度已知的
WriteableBitmap
,并将像素数据写入其中

StorageFile imagefile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/caffe2.jpg"));
int width;
int height;
byte[] Inptrbuffer;
using (IRandomAccessStream stream = await imagefile.OpenAsync(FileAccessMode.Read))
{
    SoftwareBitmap softwareBitmap;
    BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
    softwareBitmap = await decoder.GetSoftwareBitmapAsync();
    width = softwareBitmap.PixelWidth;
    height = softwareBitmap.PixelHeight;
    Windows.Graphics.Imaging.PixelDataProvider pixelData = await decoder.GetPixelDataAsync();
    Inptrbuffer = pixelData.DetachPixelData(); 
}
WriteableBitmap newfrompixel=new WriteableBitmap(width,height);
using (Stream stream = newfrompixel.PixelBuffer.AsStream())
{
    await stream.WriteAsync(Inptrbuffer, 0, Inptrbuffer.Length);
} 
Windows.UI.Xaml.Controls.Image image = new Windows.UI.Xaml.Controls.Image(); 
image.Source = newfrompixel; 
stackPanel.Children.Add(image);

如果在显示图像之前需要编辑图像,请参考。

是否尝试使用BitmapEncoder而不是位图帧?可写图像可以设置为像素。感谢回复!实际上,我确实用原生C编辑了我的照片,然后作为回报,我在我的C#应用程序中获得了PixelBuffer中提到的信息,所以我需要将PixelBuffer转换为图像,或仅从PixelBuffer数据流,我没有StorageFile或类似的things@user7827649,正如我刚才所说,“如果它不是来自WriteableBitmap,您可能需要创建一个具有已知宽度、高度的WriteableBitmap,并将像素数据写入其中。“请检查第二部分的代码片段。顺便说一句,如果我的回答对您有帮助,请标记为已接受。我有一个问题,因为我已从图片中删除alpha通道/或者是因为图片的步幅,我仍然不知道,但您的解决方案是正确的,这正是我一直在寻找的。谢谢@用户7827649,如果仍有新问题,请打开新线程。也许可以提供一些屏幕截图来澄清问题。谢谢