Сохранение растрового изображения в формате 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. Это сделает его поврежденным - вы должны сохранить растровое изображение непосредственно в PNG.
Я не пробовал эту конкретную задачу с библиотекой imagetools, но если вы видите блог Джона Папы, похоже, вам нужно вызвать 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();
}