如何在Windows Phone上压缩图像

本文关键字:压缩 图像 Phone Windows | 更新日期: 2023-09-27 18:24:58

我的应用程序使用相机拍摄图像并将其上传到flickr。我想压缩图像,这样上传的时间就不会像现在这样长。我尝试了BitmapSource和WriteableBitmap的"SaveJpeg"方法来实现这一点,但都失败了。Bitmap源在Silverlight/WP中没有与完整.NET框架版本和SaveJpeg方法中相同的可用成员WriteableBitmap一直给我一个"This stream not support write to it"错误。

这就是我目前在CameraCaptureTask完成的事件处理程序中所做的:

private void CameraCaptureCompleted(object sender, PhotoResult e)
    {
        if (e == null || e.TaskResult != TaskResult.OK)
        {
            return;
        }                                                             
        BitmapImage bitmap = new BitmapImage {CreateOptions = BitmapCreateOptions.None};                        
        bitmap.SetSource(AppHelper.LoadImage(e.ChosenPhoto));
        WriteableBitmap writeableBitmap = new WriteableBitmap(bitmap);
        // Encode the WriteableBitmap object to a JPEG stream.
        writeableBitmap.SaveJpeg(e.ChosenPhoto, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 85);
    }

这段代码给了我一个错误:"Stream不支持写入"。

有没有其他方法可以压缩图像,或者我必须写一个压缩算法?

更新已修复!!

private void CameraCaptureCompleted(object sender, PhotoResult e)
    {
        if (e == null || e.TaskResult != TaskResult.OK)
        {
            return;
        }                                                             
        BitmapImage bitmap = new BitmapImage {CreateOptions = BitmapCreateOptions.None};                        
        bitmap.SetSource(AppHelper.LoadImage(e.ChosenPhoto));
        WriteableBitmap writeableBitmap = new WriteableBitmap(bitmap);
        // Encode the WriteableBitmap object to a JPEG stream.
        writeableBitmap.SaveJpeg(new MemoryStream(), writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 85);
    }

我正试图写入源流。Doh!

谢谢。

如何在Windows Phone上压缩图像

SaveJpeg是我想做这件事的方法。你可能可以用其他方式来做,但我认为这将是最简单、最自然的。错误"This stream not support write to it"可能是因为您传递给SaveJpeg的任何流都是不可写的。我不太确定你想写什么,试着只使用一个普通的旧内存流,看看它是否像这样的一样工作

using System.IO;
// ...
MemoryStream ms = new MemoryStream();
pic.SaveJpeg(ms, pic.PixelWidth, pic.PixelHeight, 0, 0, 50);

您可以在最终参数中调整质量。PixelWidth/Height来自WriteableBitmap,因此如果您有其他来源,则可能需要使用其他方法/属性来获取宽度/高度。你可能想缩放这些,因为相机拍摄的照片可能很大。这取决于你上传这些图片的目的,但缩放它们也可以缩小文件大小。