我正在检查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数组。
答案 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()
是否已过时?