【问题标题】:PixelBuffer.AsStream() method obsolete?PixelBuffer.AsStream() 方法已过时?
【发布时间】:2015-10-13 06:59:57
【问题描述】:

我正在检查MS library

看起来PixelBuffer.AsStream() 对于通用应用程序开发来说已经过时了。

我用的是Win10(build 10240) VS2015社区版。

我有什么想念的吗?

此外,将流从字节或整数数组编码或写入 WriteableBitmap 的最佳方法是什么?

我尝试了 BitmapEncoder 中的方法,但我只能这样创建它:

BitmapEncoder enc = await BitmapEncoder.CreateForTranscodingAsync(fileStream, decoder);
enc.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, W, H, 200, 200, sourcePixels);

然后在 WriteableBitmap 上看不到任何修改。 否则框架会抛出异常(在我的代码之外)

解码器工作正常,我已将所有像素正确解码并流式传输到 byte[] sourcePixels 数组。

【问题讨论】:

    标签: c# win-universal-app writeablebitmap bitmapencoder


    【解决方案1】:

    AsStream 并没有过时。如链接的 MSDN 示例代码所示,它是有效的。它是一种扩展方法,使 IBuffer 管理更容易,而不是直接在 IBuffer 上做母亲。见https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.windowsruntime.windowsruntimebufferextensions.asstream(v=vs.110).aspx

    要使用它,请将以下 using 放在源文件的顶部:

    using System.Runtime.InteropServices.WindowsRuntime
    

    然后您就可以调用 PixelBuffer.AsStream,如文档示例所示:

    // Open a stream to copy the image contents to the WriteableBitmap's pixel buffer 
    using (Stream stream = Scenario4WriteableBitmap.PixelBuffer.AsStream()) 
    { 
        await stream.WriteAsync(sourcePixels, 0, sourcePixels.Length); 
    }     
    

    【讨论】:

      【解决方案2】:
      InMemoryRandomAccessStream MStream = new InMemoryRandomAccessStream();
       MStream.Size = (ulong)wb.PixelBuffer.Length;
      
      UpdateAndRender(sourcePixels, null, elapsedTimeUnits);
      
      Random Rand = new Random();
      Rand.NextBytes(sourcePixels);
      
      BitmapEncoder enc = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, MStream);
      enc.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, (uint)wb.PixelWidth, (uint)wb.PixelHeight, 200, 200, sourcePixels);
                                                                                      await enc.FlushAsync();
      
      wb.SetSource(MStream);
      

      这是如何写入 WriteableBitmap 的答案,但仍有一个问题:

      PixelBuffer.AsStream() 过时了吗?

      【讨论】:

      • 这是一种迂回且低效的写PixelBuffer的方式。如果缓冲区中已经有所需的像素,则无需往返编码到 png 然后解码 png。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 2011-11-01
      • 2019-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多