.net在IE和FF中生成损坏的JPEG

.net在IE和FF中生成损坏的JPEG,.net,image,.net,Image,这让我发疯了,所以 将图像大小调整为小缩略图时,IE和FF无法完整显示生成的图像。Opera正确显示图像,windows图像预览也正确显示 这是一段调整大小的代码: final_image = New System.Drawing.Bitmap(92, 110) graphic = System.Drawing.Graphics.FromImage(final_image) graphic.FillRectangle(New System.Drawing.Solid

这让我发疯了,所以

将图像大小调整为小缩略图时,IE和FF无法完整显示生成的图像。Opera正确显示图像,windows图像预览也正确显示

这是一段调整大小的代码:

     final_image = New System.Drawing.Bitmap(92, 110)
     graphic = System.Drawing.Graphics.FromImage(final_image)
     graphic.FillRectangle(New System.Drawing.SolidBrush(System.Drawing.Color.White), New System.Drawing.Rectangle(0, 0, 92, 110))
     graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
     graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
     graphic.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality
     graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality
     graphic.DrawImage(original_image, 0, 0, 92, 110)

     Dim info() As Drawing.Imaging.ImageCodecInfo = Drawing.Imaging.ImageCodecInfo.GetImageEncoders()
     Dim encoderParameters As Drawing.Imaging.EncoderParameters
     encoderParameters = New Drawing.Imaging.EncoderParameters(1)
     encoderParameters.Param(0) = New Drawing.Imaging.EncoderParameter(Drawing.Imaging.Encoder.Quality, 100L)
结果是:

如果您的浏览器正确显示上面的图像(来自FF3的屏幕截图):

但是,如果我将缩略图大小增加到126x150-在所有浏览器中,一切正常:


您可能需要在
图形
实例上调用
刷新
,即:

graphic.Flush();

完成所有绘图操作后,在从位图发出流之前执行此操作。

这可能与图像末尾的EOI标记有关

有一次类似的事情发生在我身上,我模糊地记得在JPG的末尾添加一个EOI字节就解决了这个问题


我建议您搜索EOI并尝试它。

这取决于绘图上下文,可能需要调用Save或Flush方法来解决,正如Earwicker上面所说。

所以它总是将其修剪成方形图像?几乎-显示的图像是92x94px。我猜丢失的EOF是相机的故障或拍摄照片的任何东西。我查看了我在图形应用程序中编写的代码,这基本上是你在做的,所以我不认为这是你的错。不可能是相机的错,因为输入图像已经由IrfanView(jpeg,裁剪和调整大小)处理,流保存到文件,并作为文件到浏览器。即使在本地模式下,问题也是一样的。这里没有显示图像保存代码,这与我过去所做的相同,我发现位图文件有时会是空白的,除非我在保存位图之前调用Flush,所以如果您还没有这样做,那么添加它可能是一个好主意。是的!!!!就这样!我已经在UltraEdit中打开了图像,在最后添加了FF D9,它在FF和IE中显示正常。非常感谢!)很高兴这有帮助。不知道为什么,顺便说一句。。如果有人解释一下就好了。