2009-06-30 72 views
3

破JPEG文件这是推动我疯了,所以....NET生产在IE和FF

当调整图像以小缩图,产生的图像无法通过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) 

其结果是:

This image should be missing it's lower 1/6 in FF3 and IE6/7 http://incito.hr/e387103c-b12f-4324-ac2d-a836e65a6bad-92x110.jpg

如果你的浏览器在上面正确地表示图像(从FF3屏幕捕获):

Screen capture from FF3 http://incito.hr/Clipboard02.png

不过,如果我增加缩略图尺寸126x150 - 一切都很好,在所有浏览器:

Same image resized by the same code to 126x150 http://incito.hr/4d51a5cd-621e-4709-b24a-ebb8f9da54dd-126x150.jpg

+0

因此,它总是将它修剪成方形图像? – 2009-06-30 06:18:37

+0

几乎 - 显示的图像是92x94px – Vnuk 2009-06-30 06:20:59

+0

我的猜测是丢失的EOF是相机或任何拍摄照片的错误。我查看了我在图形应用程序中编写的代码,这基本上是你在做什么,所以我不认为这是你的错。 – colithium 2009-06-30 06:32:53

回答

3

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

曾经有过类似的事情发生过,我依稀记得在JPG的末尾添加EOI字节解决了它。

我建议你在EOI上搜索wiki page并尝试它。

0

这可能是因为你需要调用FlushGraphics实例,即:

graphic.Flush(); 

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

0

这取决于绘图上下文,并可能需要调用Save或Flush方法来解决上述Earwicker所说的问题。