C# 在WP7上将位图另存为PNG

C# 在WP7上将位图另存为PNG,c#,windows-phone-7,C#,Windows Phone 7,我正在尝试将位图作为png文件保存到我的独立存储中。我在Codeplex上发现了一个名为ImageTools的库,人们一直在推荐它,但当我尝试打开该文件时,它说它已损坏。有人知道我做错了什么吗 private static void SaveImageToIsolatedStorageAsPng(BitmapImage bitmap, string fileName) { //convert to memory stream MemoryStream memoryStream =

我正在尝试将位图作为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);
    }
}

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

我没有使用尝试此特定任务,但如果您使用,则需要在作为ImageTools的一部分提供的
WriteableBitmap
上调用
ToImage
扩展方法。然后,您可以使用编码器拍摄此图像并将其写入您的开放流

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

我明白了,我不知道如何用其他方法将位图转换成流。你能将ExtendedImage的源代码设置为IsolatedFileStream吗?啊-进行快速搜索,似乎没有很好的文档记录-我已经更新了答案。如果使用“using”指令,则不必使用“stream.close()”显式关闭流当own指令关闭并处理它时。首先为什么要将其转换为较慢的格式?如果图像是JPEG格式,则将其转换为PNG不会获得任何好处。看PNG比JPEG慢。我需要的格式是PNG。他需要透明还是无损压缩?