Я борюсь с проблемой, когда мои измененные изображения теряют насыщенность цвета, когда я манипулирую ими с помощью GDI.
Я загружаю JPG как оригинал, изменяю его размер, и получившееся изображение имеет намного меньшую насыщенность (интенсивность цвета), чем исходное изображение. Что я могу сделать, чтобы улучшить это? это мой код:
using ( var original = System.Drawing.Image.FromStream( new MemoryStream( image.RawData ) ) ) { using ( var dst = new Bitmap( width, height, PixelFormat.Format32bppArgb ) ) { using ( var g = Graphics.FromImage( dst ) ) { g.SmoothingMode = SmoothingMode.HighQuality; g.PixelOffsetMode = PixelOffsetMode.HighQuality; g.CompositingQuality = CompositingQuality.HighQuality; g.DrawImage( original, 0, 0, dst.Width, dst.Height ); g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.DrawImage( original, 0, 0, dst.Width, dst.Height ); var jpgEncoder = GetEncoder( ImageFormat.Jpeg ); var myEncoderParameters = new EncoderParameters( 1 ); var quality = 95; var myEncoderParameter = new EncoderParameter( Encoder.Quality, quality ); myEncoderParameters.Param[0] = myEncoderParameter; dst.Save( buffer, jpgEncoder, myEncoderParameters ); } } }
Я пробовал с разными пиксельными форматами, удаляя все фильтры и т.д., но всегда получаю тот же результат. Это какая-то известная проблема с GDI, или я что-то пропустил?
Addon: При открытии изображения в Paint.NET я получаю ту же проблему с низкой насыщенностью, даже без масштабирования, поэтому я предполагаю, что GDI + загружает изображения (jpg)?
Это изображение было сохранено из фотошопа с цветовым профилем sRGB, но у afaik JPG нет информации о встроенных цветовых профилях. И даже если это так, я считаю, что firefox не подчиняется им (это то, что я тестировал)
Больше тестирования показывает, что в IE8 он отличается от контраста Firefox. Кажется, что JPG поддерживает цветовые профили, но большинство приложений не подчиняется им. FF3.5 однако, похоже, делает это. И это было Adobe RGB, а не sRGB на изображении.