将BitmapImage转换为Byte数组

我想在Windows Phone 7应用程序中将BitmapImage转换为ByteArray。 所以我尝试了这个,但它抛出了运行时exception“无效的指针exception”。 任何人都可以解释为什么我要做的事情会引发exception。 您能为此提供替代解决方案吗?

public static byte[] ConvertToBytes(this BitmapImage bitmapImage) { byte[] data; // Get an Image Stream using (MemoryStream ms = new MemoryStream()) { WriteableBitmap btmMap = new WriteableBitmap(bitmapImage); // write an image into the stream Extensions.SaveJpeg(btmMap, ms, bitmapImage.PixelWidth, bitmapImage.PixelHeight, 0, 100); // reset the stream pointer to the beginning ms.Seek(0, 0); //read the stream into a byte array data = new byte[ms.Length]; ms.Read(data, 0, data.Length); } //data now holds the bytes of the image return data; } 

好吧,我可以使你的代码变得相当简单:

 public static byte[] ConvertToBytes(this BitmapImage bitmapImage) { using (MemoryStream ms = new MemoryStream()) { WriteableBitmap btmMap = new WriteableBitmap (bitmapImage.PixelWidth, bitmapImage.PixelHeight); // write an image into the stream Extensions.SaveJpeg(btmMap, ms, bitmapImage.PixelWidth, bitmapImage.PixelHeight, 0, 100); return ms.ToArray(); } } 

……但这可能无法解决问题。

另一个问题是你只使用了bitmapImage大小 – 你不应该在某个时候将它复制到btmMap吗?

有什么理由你不只是使用这个:

 WriteableBitmap btmMap = new WriteableBitmap(bitmapImage); 

您能否向我们提供有关错误发生位置的更多信息?

我不确定你的问题究竟是什么,但我知道下面的代码是一个非常小的变化,我知道的代码是有效的(我的是在WriteableBitmap中传递,而不是BitmapImage):

 public static byte[] ConvertToBytes(this BitmapImage bitmapImage) { byte[] data = null; using (MemoryStream stream = new MemoryStream()) { WriteableBitmap wBitmap = new WriteableBitmap(bitmapImage); wBitmap.SaveJpeg(stream, wBitmap.PixelWidth, wBitmap.PixelHeight, 0, 100); stream.Seek(0, SeekOrigin.Begin); data = stream.GetBuffer(); } return data; } 

我有同样的问题,这解决了它:

代码:

 BitmapImage bi = new BitmapImage(); bi.SetSource(e.ChosenPhoto); WriteableBitmap wb = new WriteableBitmap(bi); 

代码后:

 BitmapImage bi = new BitmapImage(); bi.CreateOptions = BitmapCreateOptions.None; bi.SetSource(e.ChosenPhoto); WriteableBitmap wb = new WriteableBitmap(bi);