C#将位图转换为索引颜色格式



如何将24位彩色System.Drawing.Bitmap转换为索引(256色)格式?我很难弄清楚如何计算调色板。我可以对像素进行迭代,并使用int[]来包含各种颜色,但当颜色超过256种时,问题就来了。有没有一种方法可以转换为索引格式并从Bitmap中提取256调色板?

使用位图克隆方法,您可以直接将源图像转换为256色调色板索引图像,如下所示:

Bitmap Result = Source.Clone(new Rectangle(0, 0, Source.Width, Source.Height), PixelFormat.Format8bppIndexed);

然后,如果您想访问调色板颜色,只需使用Result.Palette.Entries属性即可。

我之前也遇到过同样的挑战。在.Net.中使用GDI+是可以解决的

这篇文章对我帮助很大(包括示例):http://msdn.microsoft.com/en-us/library/Aa479306

为了获得最佳质量,请使用"基于八叉树的量化"。

WPF可以访问Windows成像组件,从那里您可以使用FormatConvertedBitmap将图像转换为新的像素格式。WIC比在Vista和7上使用System.Drawing方法要快得多,并且会给你更多的选择。

这不是内置的,但您可以为此使用外部.NET库,也可以通过shell到控制台来调用ImageMagic。

一些入门读物。

  • Graphic Gems I第287-293页,"一种简单的颜色量化方法:八叉树量化"

  • B。库尔兹。彩色显示器的最佳色彩量化。《IEEE计算机视觉与模式识别会议论文集》,1983年,第217-224页。

  • Graphic Gems II第116-125页,"高效反向彩色地图计算"

本文描述了一种将实际颜色映射到缩减颜色映射的有效技术,该技术是由其他论文中描述的其他技术选择的。

  • Graphic Gems II第126-133页,"用于最佳颜色量化的高效统计计算"

  • 吴晓林。动态规划和主分析的颜色量化。ACM图形汇刊,第11卷,第4期,1992年10月,第348-372页。

最新更新