我正在.net中创建一些非常大的图像,我正在使用JPEG压缩来降低文件大小。但是,如果图像宽度或高度超过65,000(ish)像素,我就不能再使用jpeg压缩。 JPEG是否有最大尺寸限制?
抛出的异常是:
System.Runtime.InteropServices.ExternalException(0x80004005):GDI +中发生一般错误。 在System.Drawing.Image.Save(String filename,ImageCodecInfo encoder,EncoderParameters encoderParams)
保存图片的代码:
public static void SaveImage(ref Bitmap b, string fName)
{
long quailty = 75;
ImageCodecInfo jpgEncoder = getEncoder(ImageFormat.Jpeg);
Encoder myEncoder = Encoder.Quality;
using (EncoderParameters myEncoderParameters = new EncoderParameters(1))
{
using (EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, quailty))
{
myEncoderParameters.Param[0] = myEncoderParameter;
b.Save(fName, jpgEncoder, myEncoderParameters);
}
}
}
在上述例外情况下,图像为2,000x100,000,幻数似乎在65k范围内,包括宽度和高度。比如,我可以做4,000x55,000而不是2x70000。
我也尝试使用BitmapWriter,使用下面的代码,我得到错误:“图像尺寸超出了此编解码器支持的范围”
wb = new WriteableBitmap(2000, 100000, 96, 96, PixelFormats.Bgra32, null);
using (FileStream stream5 = new FileStream(fileName, FileMode.Create))
{
PngBitmapEncoder encoder5 = new PngBitmapEncoder();
encoder5.Frames.Add(BitmapFrame.Create(wb));
encoder5.Save(stream5);
}