2014-04-15 74 views
1

我想使用像素字節在windows phone 8中繪製圖像。所以我通過C++庫(C++/CLI)獲得一些像素字節。但像素數據不包含位圖標題。它只是像素字節數組。 這是可能將像素數據數組轉換爲位圖在windows phone中沒有位圖標題的圖像?如何將像素字節數組轉換爲Windows Phone 8中的位圖圖像

public void updateImage(byte[] byteArray, UInt32 bufferSize, int cvtWidth, int cvtHeight) 
    { 
     // I saw this source a lot of search. But It's not work. It makes some exeption. 
     BitmapImage bi = new BitmapImage(); 
     MemoryStream memoryStream = new MemoryStream(byteArray); 
     bi.SetSource(memoryStream); 

     ImageScreen.Source = bi; 
    } 

回答

1

你需要使用一個WriteableBitmap的:http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.media.imaging.writeablebitmap

然後你就可以訪問它的PixelBuffer使用AsStream並保存陣列流中。

//srcWidth and srcHeight are original image size, needed 
//srcData is pixel data array 
WriteableBitmap wb = new WriteableBitmap(srcWidth, srcHeight); 

using (Stream stream = wb.PixelBuffer.AsStream()) 
{ 
    await stream.WriteAsync(srcData, 0, srcData.Length); 
} 

EDIT

如Proglamour在Windows電話指出沒有PixelBuffer,而是一個屬性命名像素,其是一個數組存在。

它無法替代的,但它的內容可以使這應該工作:

WriteableBitmap wb = new WriteableBitmap(srcWidth, srcHeight); 
Array.Copy(srcData, wb.Pixels, srcData.Length); 
+0

如何使用WriteableBitmap?我嘗試。但我無法畫畫。這是我的代碼。 'MemoryStream memoryStream = new MemoryStream(); WriteableBitmap wb = new WriteableBitmap(cvtWidth,cvtHeight); wb.SetSource(byteArray.AsBuffer()。AsStream()); //發生異常 ImageScreen.Source = wb;' – Proglamour

+0

以示例 – Gusman

+0

更新答案感謝您的回覆。但在Windows Phone 8中沒有PixelBuffer。我認爲它在Windows 8中工作。 – Proglamour

1

我解決了這個問題。感謝您的幫助菲利普。

public void updateImage(byte[] byteArray, UInt32 bufferSize, int cvtWidth, int cvtHeight) 
    { 
     Dispatcher.BeginInvoke(() => 
     { 
      WriteableBitmap wb = new WriteableBitmap(cvtWidth, cvtHeight); 
      System.Buffer.BlockCopy(byteArray, 0, wb.Pixels, 0, byteArray.Length); 
      //wb.Invalidate(); 
      ImageScreen.Source = wb; 
     }); 
    } 
相關問題