在WP7上将位图保存为PNG

本文关键字:保存 PNG 位图 WP7 | 更新日期: 2023-09-27 18:08:20

我试图将位图保存到我的隔离存储为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);
    }
}

在WP7上将位图保存为PNG

您正在尝试将JPEG内存流转换为PNG。这将使它损坏-你应该直接将位图保存为PNG。

我还没有在imagetools库中尝试过这个特殊的任务,但是如果你看到John Papa的博客,看起来你需要在你的WriteableBitmap上调用ToImage扩展方法,这是作为imagetools的一部分提供的。然后,您可以使用编码器获取此图像并将其写入打开的流。

var img = bitmap.ToImage();
var encoder = new PngEncoder();
using (var stream = new IsolatedStorageFileStream(fileName, FileMode.Create, store))
{
    encoder.Encode(img, stream);
    stream.Close();
}