【发布时间】:2010-12-07 07:34:31
【问题描述】:
我正在解决一个问题,即当我使用 GDI 操作调整大小的图像时,它们会失去色彩饱和度。
我将 JPG 加载为原始图片,调整其大小,结果图像的饱和度(颜色强度)比原始图片低很多。我能做些什么来改善它?这是我的代码:
使用(var original = System.Drawing.Image.FromStream(new MemoryStream(image.RawData))) { 使用(var dst = new Bitmap(宽度,高度,PixelFormat.Format32bppArgb)) { 使用 ( var g = Graphics.FromImage( dst ) ) { g.SmoothingMode = SmoothingMode.HighQuality; g.PixelOffsetMode = PixelOffsetMode.HighQuality; g.CompositingQuality = CompositingQuality.HighQuality; g.DrawImage(原始, 0, 0, dst.Width, dst.Height ); g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.DrawImage(原始, 0, 0, dst.Width, dst.Height ); var jpgEncoder = GetEncoder(ImageFormat.Jpeg); var myEncoderParameters = new EncoderParameters( 1 ); 变量质量 = 95; var myEncoderParameter = new EncoderParameter(Encoder.Quality, quality); myEncoderParameters.Param[0] = myEncoderParameter; dst.Save(缓冲区,jpgEncoder,myEncoderParameters); } } }我尝试过使用不同的像素格式,删除所有过滤器等,但我总是得到相同的结果。这是 GDI 的一些已知问题,还是我遗漏了什么?
插件: 在 Paint.NET 中打开图像时,即使没有重新缩放,我也会遇到低饱和度的相同问题,所以我猜这是 GDI+ 加载图像 (jpgs) 的方式?
此图像是使用颜色配置文件 sRGB 从 Photoshop 保存的,但 afaik JPG 没有关于嵌入颜色配置文件的信息。即使这样做了,我相信 firefox 不会服从他们(这是我测试过的)
更多的测试表明它在 IE8 中看起来与 Firefox 不同。 JPG 似乎支持颜色配置文件,但大多数应用程序不遵守它们。然而,FF3.5 似乎做到了。而且图片上是 Adobe RGB,而不是 sRGB。
【问题讨论】:
-
image.RawData 哪里来的?
-
@Andre:这只是包含图像的初始字节数组。就我而言,它是从数据库加载的,但它可以从任何地方加载。 Image.FromStream 接受一个流,因此它可以是 FileStream、网络流或其他任何东西。我有一个字节数组,所以我将它包装在 MemoryStream 中。
标签: c# .net image-processing gdi+ colors