.net производит сломанные JPEG в IE и FF - PullRequest
3 голосов
/ 30 июня 2009

Это сводит меня с ума, так что ...

При изменении размера изображения на небольшую миниатюру результирующее изображение не может отображаться полностью в IE и FF. Opera правильно показывает изображение, а также окно предварительного просмотра изображений.

Это фрагмент кода, делающий изменение размера:

     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)

Результат:

Это изображение должно отсутствовать, оно ниже 1/6 в FF3 и IE6 / 7 http://incito.hr/e387103c-b12f-4324-ac2d-a836e65a6bad-92x110.jpg

Если ваш браузер правильно показывает изображение выше (снимок экрана с FF3):

Снимок экрана с FF3 http://incito.hr/Clipboard02.png

Однако, если я увеличу размер миниатюры до 126x150 - все нормально, во всех браузерах:

То же изображение, измененное по тому же коду до 126x150 http://incito.hr/4d51a5cd-621e-4709-b24a-ebb8f9da54dd-126x150.jpg

Ответы [ 3 ]

3 голосов
/ 30 июня 2009

Это может быть связано с маркером EOI в конце изображения.

Нечто подобное случилось со мной однажды, и я смутно помню, что добавление байта EOI в конец JPG решило это.

Я предлагаю вам поискать в вики-странице EOI и попробовать его.

0 голосов
/ 30 июня 2009

Это зависит от контекста рисования и может потребовать вызова метода Save или Flush для решения, как сказал Earwicker выше.

0 голосов
/ 30 июня 2009

Возможно, вам нужно вызвать Flush в экземпляре Graphics, т. Е .:

graphic.Flush();

Сделайте это, когда закончите все операции рисования, прежде чем испустить поток из растрового изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...