PixelBuffer.AsStream() метод устарел?
Я проверял библиотеку MS.
и похоже PixelBuffer.AsStream()
устарел для разработки Univesal App.
Я использую Win10(сборка 10240) с версией VS2015 Community.
Я что-то пропустил?
Кроме того, каков наилучший способ кодирования или записи потока в WriteableBitmap из массива байтов или целых чисел?
Я пробовал метод из BitmapEncoder, но я мог создать его только так:
BitmapEncoder enc = await BitmapEncoder.CreateForTranscodingAsync(fileStream, decoder);
enc.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, W, H, 200, 200, sourcePixels);
и после этого не было никаких изменений, видимых на WriteableBitmap. в противном случае фреймворк выбрасывал исключения (за пределами моего кода)
Декодер работал нормально, и все пиксели были правильно декодированы и переданы в массив byte[] sourcePixels.
2 ответа
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);
}
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()
устарел?