我有一个比较奇怪的错误。我需要将图像缩小,降低质量并转换为JPEG格式。当我将文件保存在磁盘上时,这一切都能正常工作,但是当我将其保存到流中时,就会出现问题。
System.Drawing.Bitmap bitmap = // valid Bitmap from Disk
System.IO.Stream stream = new MemoryStream();
// JPEG Encoding
System.Drawing.Imaging.ImageCodecInfo jpgEncoder = GetEncoder( System.Drawing.Imaging.ImageFormat.Jpeg );
System.Drawing.Imaging.Encoder encoder2 = System.Drawing.Imaging.Encoder.Quality;
System.Drawing.Imaging.EncoderParameters parameters = new System.Drawing.Imaging.EncoderParameters( 1 );
System.Drawing.Imaging.EncoderParameter parameter = new System.Drawing.Imaging.EncoderParameter( encoder2, qualityLevel );
parameters.Param[0] = parameter;
// Save downscaled on Disk and stream
bitmap.Save( stream, jpgEncoder, parameters );
bitmap.Save( @"C:\TestJPEG.jpg", jpgEncoder, parameters );
// some stream stuff
var bytes = ((MemoryStream)stream).ToArray();
System.IO.Stream inputStream = new MemoryStream( bytes );
// Load from disk and stream
Bitmap fromDisk = new Bitmap( @"C:\TestJPEG.jpg" ); // works
Bitmap fromStream = new Bitmap( inputStream ); // crash invalid parameter no inner message or description
Bitmap fromStream2 = (Bitmap)Bitmap.FromStream( inputStream ); // same error here
// also crashes if I load the "stream" named Stream
我还可以使用Paint打开转换后的文件。有什么建议吗?
编辑: 我正在使用Windows 7专业版上的.Net Framework 4.0。
编辑2: 尝试了那个"Seek"的方法(答案已删除)。
stream.Seek( 0, SeekOrigin.Begin );
它可以使用“旧”流。但我需要从字节数组中加载它。仍然崩溃。
Image.FromStream
而不是Bitmap
构造函数吗?另外,在文件保存后,如果你Disposebitmap
会发生什么? - leppienew EncoderParameter
的值上。您确定您遇到的异常是在您所说的那一行吗? - Daniel HilgarthqualityLevel
更改为long
。 - Daniel Hilgarthlong
值参数,但我没想到那可能是原因。非常好的提示! - Arndt Bieberstein