2015-10-13 80 views
-1

我正在检查MS libraryPixelBuffer.AsStream()方法已过时?

它看起来像PixelBuffer.AsStream()已经过时的Univesal应用程序开发。

我正在使用Win10(内部版本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数组。

回答

0
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()过时了吗?

+0

这是一个写字PixelBuffer的低效方式。如果你已经在缓冲区中有了你想要的像素,那么就不需要往png往返编码,然后解码png。 –

1

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

要使用它,把下面的使用在源文件的顶部:如图所示的文件的样本中

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); 
}  
+0

谢谢。这工作! – user5439554