-1

这是交易。我正在尝试使用一个函数来压缩笔记本相机中的图像,同时使用标准代码来执行此操作:

    public static byte[] EncodeImage(this Image image)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
            EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 80);
            EncoderParameters encoderParams = new EncoderParameters(1);
            encoderParams.Param[0] = qualityParam;

            image.Save(ms, jpegCodec, encoderParams);
            return ms.ToArray();
        }
    }

压缩完成后,我将其保存到数据库中。效果很好,为我提供了大量的压缩(500 000 字节 vs 32 000)。一段时间后,我需要在 winforms 应用程序中向用户显示图像。

using (MemoryStream ms = new MemoryStream(entity.Photo))
    fotoPictureBox.Image = Image.FromStream(ms);

同样,这显示了一个很好的图像。但是,我希望用户能够下载图像并保存在他认为合适的位置。这就是所有问题出现的时候。

如果我使用此代码:

fotoPictureBox.Image.Save(imageSaveFileDialog.FileName);

我收到一个典型的generic GDI+错误。如果我尝试使用已编码的代码保存图像

     public static void SaveEncodedImage(this Image image, string targetPath)
    {
        ImageCodecInfo jpegCodec = Pomocne.GetEncoderInfo("image/jpeg");
        EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 80);
        EncoderParameters encoderParams = new EncoderParameters(1);
        encoderParams.Param[0] = qualityParam;

        image.Save(targetPath, jpegCodec, encoderParams);
    }

我收到此错误(指向行image.Save(targetPath, jpegCodec, encoderParams);):

An unhandled exception of type System.ArgumentException occurred in System.Drawing.dll Additional information: Parameter is not valid.

可以请任何人帮忙吗?比较急,谢谢。

要解决一些问题/答案,您可能会开始 - 如果我不使用此代码压缩图像,我可以将图像保存到所选路径而不会出现任何问题。因此,解码或类似的东西显然存在一些问题。不要问我是否有足够的权限,因为我有。

4

1 回答 1

0

出于某种原因,这段代码效果很好:

File.WriteAllBytes(targetPath, byteArray);

我想有时最简单的解决方案是正确的。不确定确切的解释(你可以提供一个,我肯定会投赞成票),但这已经解决了。不管怎么说,还是要谢谢你。

于 2012-11-29T08:56:56.670 回答