2009-06-30 11 views
3

Das macht mich verrückt, so ....net Herstellung gebrochen JPEGs in IE und FF

Wenn Bild kleines Thumbnail Ändern der Größe, Bild, kann sie nicht in vollem Umfang von IE und FF angezeigt werden. Opera zeigt das Bild korrekt an, und auch die Vorschau des Windows-Bildes.

Dies ist Teil des Codes Ändern der Größe zu tun:

 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) 

Das Ergebnis:

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

Falls Ihr Browser (Bildschirmaufnahme von FF3) über das Bild korrekt angezeigt wird:

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

Wenn ich jedoch Miniaturgröße auf 126x150 erhöhen - alles ist in Ordnung, in allen Browsern:

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

+0

Also wird es immer in ein quadratisches Bild getrimmt? –

+0

Fast - das angezeigte Bild ist 92x94px – Vnuk

+0

Meine Vermutung ist die fehlende EOF ist der Fehler der Kamera oder was auch immer das Bild gemacht. Ich habe mir den Code angeschaut, den ich in einer Grafikanwendung geschrieben habe, und es ist im Grunde das, was du tust, also glaube ich nicht, dass du daran schuld bist. – colithium

Antwort

3

Dies könnte mit der EOI-Markierung am Ende des Bildes zusammenhängen.

Etwas ähnliches passiert mir einmal und ich erinnere mich vage daran, dass das Hinzufügen eines EOI-Bytes am Ende des JPG es gelöst hat.

Ich schlage vor, Sie suchen die wiki page für EOI und versuchen Sie es.

+0

Ja !!!! Das ist es! Ich habe das Bild in UltraEdit geöffnet, FF D9 am Ende hinzugefügt und es wird in FF und IE angezeigt. Danke vielmals! – Vnuk

+0

:) Schön, dass es geholfen hat. Keine Ahnung warum das so ist, btw .. wäre schön wenn jemand es erklärt hätte. –

0

Es kann sein, dass Sie Flush auf der Graphics Instanz anrufen müssen, das heißt:

graphic.Flush(); 

Führen Sie dies aus, wenn Sie alle Zeichenoperationen abgeschlossen haben, bevor Sie den Stream aus der Bitmap ausgeben.

+0

Stream wird in Datei gespeichert und als Datei an den Browser geliefert. Das Problem ist auch im lokalen Modus das gleiche. Der Bildspeichercode wird hier nicht angezeigt – Vnuk

+0

Das ist das gleiche, was ich in der Vergangenheit getan habe, und ich habe festgestellt, dass die Bitmap-Datei gelegentlich leer ist, wenn ich nicht vor dem Speichern der Bitmap den Flush aufruft, also wahrscheinlich ein guter Idee, es hinzuzufügen, wenn Sie nicht bereits haben. –

0

Dies hängt vom Kontext der Zeichnung ab und erfordert möglicherweise den Aufruf der Save- oder Flush-Methode zur Lösung, wie oben erwähnt.

Verwandte Themen