PixelBuffer.AsStream()方法已经过时了?

时间:2015-10-13 06:59:57

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

我正在检查MS library

看起来PixelBuffer.AsStream()对于Univesal App开发已经过时了。

我正在使用VS10(版本10240)和VS2015社区版。

我会错过什么吗?

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

我正在尝试使用BitmapEncoder中的方法,但我只能这样创建它:

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

之后,WriteableBitmap上没有可见的修改。 否则框架抛出异常(在我的代码之外)

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

2 个答案:

答案 0 :(得分: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); 
}     

答案 1 :(得分: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()是否已过时?