这是交易。我正在尝试使用一个函数来压缩笔记本相机中的图像,同时使用标准代码来执行此操作:
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.
可以请任何人帮忙吗?这很紧急,谢谢。
要解决一些问题/答案,您可能会开始 - 如果我不使用此代码压缩图像,我可以将图像保存到所选路径而不会出现任何问题。因此,解码或类似问题显然存在一些问题。不要问我是否有足够的权限,因为我有。
答案 0 :(得分:0)
出于某种原因,这段代码效果很好:
File.WriteAllBytes(targetPath, byteArray);
我猜有时最简单的解决方案是正确的解决方案。不确定确切的解释(你可以提供一个,我肯定会投票),但这已经解决了。 不管怎样,谢谢。