首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将RenderTargetBitmap转换为BitmapImage

将RenderTargetBitmap转换为BitmapImage
EN

Stack Overflow用户
提问于 2015-10-05 11:16:32
回答 2查看 3K关注 0票数 0

如何在Windows8.1的RenderTargetBitmap XAML中将BitmapImage转换成C#?

我试过了

代码语言:javascript
复制
// 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);

但它总是给我们带来错误

代码语言:javascript
复制
img.SetSourceAsync(randomAccessStream);

在WPF中有很多种方法,但是在WinRT中?我怎么能这么做?

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-05 12:42:01

这就是使用Sharing render to bitmap image in windows phone 8.1的那个

结果发现我不能直接用

代码语言:javascript
复制
stream.WriteAsync(byteArray.AsBuffer());

你必须使用位图编码器,最后的工作代码:

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2015-10-05 11:51:52

你试过这个吗?

代码语言:javascript
复制
  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 :

试试这个:

代码语言:javascript
复制
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 Store (Metro, WinRT) Byte array to BitmapImage

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32947267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档