2015-10-13 53 views
-1

我正在檢查MS libraryPixelBuffer.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的可見。 否則框架拋出異常(我的代碼以外)

解碼器工作正常,我已經得到所有像素正確解碼並流式傳輸到byte [] sourcePixels數組。

回答

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

相關問題