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);
然后,如果要访问Palette Colors,只需使用Result.Palette.Entries
属性。
我之前遇到过同样的挑战。 可以在.Net中使用GDI +来解决。
这篇文章给了我很多帮助(包括样本): http : //msdn.microsoft.com/en-us/library/Aa479306
为了获得最佳质量,请使用“基于八叉树的量化”。
这不是内置的,但您可以为此使用外部.NET库,也可以在控制台中调用ImageMagic。
一些阅读材料可以帮助您入门。
-
Graphic Gems I pp.287-293,“一种简单的颜色量化方法:八叉树量化”
-
B.库兹。 彩色显示器的最佳颜色量化。 IEEE计算机视觉和模式识别会议论文集,1983年,第217-224页。
-
Graphic Gems II pp.116-125,“高效反色图计算”
本文描述了一种将实际颜色映射到缩小颜色图的有效技术,该颜色图通过其他论文中描述的其他技术选择。
-
Graphic Gems II pp.126-133,“用于最佳颜色量化的高效统计计算”
-
吴小林 动态规划和主成分分析的颜色量化。 ACM Transactions on Graphics,Vol。 1992年10月11日第4号,第348-372页。
WPF可以访问Windows Imaging Component,您可以使用FormatConvertedBitmap将图像转换为新的像素格式。 WIC比Vista和7上的System.Drawing方法快得多,并且可以为您提供更多选项。