这是交易。我正在尝试使用一个函数来压缩笔记本相机中的图像,同时使用标准代码来执行此操作:
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.
可以请任何人帮忙吗?比较急,谢谢。
要解决一些问题/答案,您可能会开始 - 如果我不使用此代码压缩图像,我可以将图像保存到所选路径而不会出现任何问题。因此,解码或类似的东西显然存在一些问题。不要问我是否有足够的权限,因为我有。