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