0

我正在检查MS 库

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

我正在使用带有 VS2015 社区版的 Win10(内部版本 10240)。

我想念什么吗?

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

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

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

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

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

4

2 回答 2

3

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); 
}     
于 2015-10-14T14:53:04.533 回答
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()过时了吗?

于 2015-10-14T08:43:08.080 回答