在WP7上将位图保存为PNG

我正在尝试将位图保存为我的隔离存储作为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。 这会使它损坏 – 你应该将Bitmap直接保存到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(); }