Преобразование массива BitmapImage в байт
Я хочу преобразовать BitmapImage в ByteArray в приложении Windows Phone 7. Поэтому я попробовал это, но он выдает исключение Execution Execution Execution Execution 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;
}
Ответы
Ответ 1
Ну, я могу сделать код у вас значительно проще:
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);
Можете ли вы дать нам больше информации о том, где происходит ошибка?
Ответ 2
Я не уверен, в чем проблема, но я знаю, что следующий код - это очень незначительное изменение кода, который, как я знаю, работает (мой был передан в 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;
}
Ответ 3
У меня была такая же проблема, это решает:
Код до:
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);