2014-04-15 73 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; 
     }); 
    } 
相关问题