jis*_*shi 11 .net c# gdi+ colors image-processing
我正在解决一个问题,当我使用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 ); } } }
我已尝试使用不同的pixelformats,删除所有过滤器等,但我总是得到相同的结果.这是GDI的一些已知问题,还是我错过了什么?
Addon:在Paint.NET中打开图像时,即使没有重新缩放,我也会遇到饱和度低的问题,所以我猜这是GDI +加载图像的方式(jpgs)?
此图像是从具有颜色配置文件sRGB的photoshop保存的,但是JPA没有关于嵌入的颜色配置文件的信息.即使它确实如此,我相信firefox也不遵守它们(这是我测试过的)
更多测试表明,与Firefox相比,它在IE8中看起来有所不同.JPG似乎支持颜色配置文件,但大多数应用程序不遵守它们.但是,FF3.5似乎也是这样做的.它是Adobe RGB,而不是图像上的sRGB.
jis*_*shi 21
我自己找到了答案.它与GDI +中默认应用的颜色配置文件有关.许多人声称你不能使用GDI自动应用颜色配置文件,但显然,我需要做的唯一改变是:
using ( var original = System.Drawing.Image.FromStream( new MemoryStream( image.RawData ) ) )
至
using ( var original = new Bitmap( new MemoryStream( image.RawData ), true ) )
显然,Bitmap是Image的派生类,Bitmap的构造函数可以同时使用流和"useIcm"的布尔值.这对我有用.