繁体   English   中英

将RenderTargetBitmap转换为BitmapImage

[英]Convert a RenderTargetBitmap to BitmapImage

如何在C#XAML,Windows 8.1中将RenderTargetBitmap转换为BitmapImage?

我试过了

// rendered is the RenderTargetBitmap 
BitmapImage img = new BitmapImage();
InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
await randomAccessStream.WriteAsync(await rendered.GetPixelsAsync());
randomAccessStream.Seek(0); 
await img.SetSourceAsync(randomAccessStream);

但是它总是在

img.SetSourceAsync(randomAccessStream);

WPF中有很多方法,但WinRT中有很多方法? 我怎样才能做到这一点 ?

非常感谢!

这是在Windows Phone 8.1中将共享渲染为位图图像的一种方法

原来我只是不能直接使用填充流

stream.WriteAsync(byteArray.AsBuffer());

您必须使用位图编码器,最终工作代码:

InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream();
        var buffer = await rendered.GetPixelsAsync();
      //  await stream.ReadAsync(buffer, (uint)buffer.Length, InputStreamOptions.None);
        BitmapImage img = new BitmapImage();
        var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
        encoder.SetPixelData(
            BitmapPixelFormat.Bgra8,
            BitmapAlphaMode.Straight,
            (uint)rendered.PixelWidth,
            (uint)rendered.PixelHeight,
            DisplayInformation.GetForCurrentView().LogicalDpi,
            DisplayInformation.GetForCurrentView().LogicalDpi,
            buffer.ToArray());
        await encoder.FlushAsync();
        await img.SetSourceAsync(stream);
        preview.Source = img;

您是否尝试过这个:

  var bitmap = new  RenderTargetBitmap();

  await bitmap.RenderAsync(elementToRender);

  image.Source = bitmap;

参考: http : //social.technet.microsoft.com/wiki/contents/articles/20648.using-the-rendertargetbitmap-in-windows-store-apps-with-xaml-and-c.aspx

更新:

其他参考资料可能会有所帮助:

更新2:

试试这个:

private async Task<BitmapImage> ByteArrayToBitmapImage(byte[] byteArray)
    {
        var bitmapImage = new BitmapImage();

        var stream = new InMemoryRandomAccessStream();
        await stream.WriteAsync(byteArray.AsBuffer());
        stream.Seek(0);

        bitmapImage.SetSource(stream);
        return bitmapImage;
    }

参考: C#Windows 8存储(Metro,WinRT)字节数组到BitmapImage

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM