У меня есть приложение Silverlight вне браузера, и я хочу сохранить изображения в указанном каталоге. В приложении у меня есть изображение, загруженное в BitmapImage, и я хочу сохранить его на HardDrive (в jpg, если это возможно). Мой код:
private void SaveImageToImagePath(BitmapImage image)
{
string path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Images");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
Save(image, new FileStream(Path.Combine(path, String.Format("{0}.jpg", _imageName)), FileMode.OpenOrCreate));
}
private void Save(BitmapSource bitmapSource, FileStream stream)
{
var writeableBitmap = new WriteableBitmap(bitmapSource);
for (int i = 0; i < writeableBitmap.Pixels.Length; i++)
{
int pixel = writeableBitmap.Pixels[i];
byte[] bytes = BitConverter.GetBytes(pixel);
Array.Reverse(bytes);
stream.Write(bytes, 0, bytes.Length);
}
}
Я также пытался с помощью этого метода перейти от BitmapImage к ByteArray:
private byte[] ToByteArray(WriteableBitmap bmp)
{
// Init buffer
int w = bmp.PixelWidth;
int h = bmp.PixelHeight;
int[] p = bmp.Pixels;
int len = p.Length;
byte[] result = new byte[4 * w * h];
// Copy pixels to buffer
for (int i = 0, j = 0; i < len; i++, j += 4)
{
int color = p[i];
result[j + 0] = (byte)(color >> 24); // A
result[j + 1] = (byte)(color >> 16); // R
result[j + 2] = (byte)(color >> 8); // G
result[j + 3] = (byte)(color); // B
}
return result;
}
Проблема в том, что файл, который я получаю, не читается (поврежден), и когда я пытаюсь прочитать его из приложения, я получаю катастрофический сбой . Я также заметил, что файл, сгенерированный приложением, в четыре раза тяжелее исходного ...
Спасибо за вашу помощь!
Philippe
Источники:
Можно ли получить байт [] из BitmapImage в Silverlight?
Silverlight: изображение в байтах []