2015-10-13 5 views
-1

Я проверял MS library.Метод PixelBuffer.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. , в противном случае структура исключала исключения (за пределами моего кода)

Декодер работал отлично, и я получил все пиксели, правильно декодированные и переданные в байт [] sourcePixels array.

ответ

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