我需要手动或通过一些内置的 .net 功能将 32 位 bmp 减少到最多 256 种颜色。我还没有找到任何有关如何操作的信息。请有人提供一些指示。
编辑:澄清一下,我并不只是想将 32 位 bmp 转换为 8 位 bmp。我想将输入 bmp 映射到标准 256 调色板,因此我知道它将在便携式设备上正常显示。一种“确保网络安全”功能。
实现它的一种简单方法,在某种意义上也是最优的(参见Lloyd 算法,也称为 Lloyd Max 量化),是通过 K 均值聚类。
如果图像的大小为
(numRows x numCols x 3)
,那么它基本上具有 numPx = numRows * numCols
3D 样本。numColors
,在你的例子中是 256。这是一个简单的例子。
输入图片
量化图像(256 色)
量化图像(128 色)
量化图像(64 色)
量化图像(32 色)
备注:
RGB
。对于此类任务,最好使用不同的颜色表示。例如,使用 LAB
颜色表示。代码可以在我的 StackOverflow GitHub Repository 上找到(查看
StackOverflow\Q2176266
文件夹)。