Сохранение растрового изображения как 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();
}