C#将位图转换为索引颜色格式
本文关键字:索引 颜色 格式 转换 位图 | 更新日期: 2023-09-27 18:21:21
如何将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页。