在WP7上将位图保存为PNG

时间:2011-09-11 14:42:09

标签: c# windows-phone-7

我正在尝试将位图作为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 个答案:

答案 0 :(得分:16)

您正在尝试将JPEG内存流转换为PNG。这将使其损坏 - 您应该将Bitmap直接保存到PNG。

我没有使用imagetools library尝试此特定任务,但如果您see John Papa's blog,您似乎需要在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();
}
相关问题