将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);