保存编码图像会返回GDI +错误

时间:2012-11-29 08:47:06

标签: c# winforms image

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

    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字节对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.

可以请任何人帮忙吗?这很紧急,谢谢。

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

1 个答案:

答案 0 :(得分:0)

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

File.WriteAllBytes(targetPath, byteArray);

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