Сохранение растрового изображения как PNG на WP7
Я пытаюсь сохранить растровое изображение в моем изолированном хранилище в виде файла png. Я нашел библиотеку на Codeplex под названием ImageTools, которую люди рекомендовали, но когда я пытаюсь ее открыть и пытается открыть файл, он говорит, что ее коррумпирован. Кто-нибудь знает, что я делаю неправильно?
private static void SaveImageToIsolatedStorageAsPng(BitmapImage bitmap, string fileName)
{
//convert to memory stream
MemoryStream memoryStream = new MemoryStream();
WriteableBitmap writableBitmap = new WriteableBitmap(bitmap);
writableBitmap.SaveJpeg(memoryStream, bitmap.PixelWidth, bitmap.PixelHeight, 0, 100);
//encode memory stream as PNG
ExtendedImage image = new ExtendedImage();
image.SetSource(memoryStream);
PngEncoder encoder = new PngEncoder();
//Save to IsolatedStorage
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
using (var writeStream = new IsolatedStorageFileStream(fileName, FileMode.Create, store))
{
encoder.Encode(image, writeStream);
}
}
Ответы
Ответ 1
Вы пытаетесь преобразовать поток памяти JPEG в PNG. Это приведет к его повреждению - вы должны сохранить Bitmap напрямую в PNG.
Я не пробовал эту конкретную задачу с помощью библиотеки imagetools, но если вы см. блог John Papa, похоже, вам нужно вызвать метод расширения ToImage
на вашем WriteableBitmap
, который предоставляется как часть ImageTools. Затем вы можете использовать кодировщик, чтобы взять это изображение и записать его в открытый поток.
var img = bitmap.ToImage();
var encoder = new PngEncoder();
using (var stream = new IsolatedStorageFileStream(fileName, FileMode.Create, store))
{
encoder.Encode(img, stream);
stream.Close();
}