减少图像位C++

js5cn81o  于 2022-12-05  发布在  其他
关注(0)|答案(2)|浏览(147)

如何将位数从24位减少到0到8位之间的数字,并将这些位分配给红色、绿色和蓝色三种颜色
你知道吗?

ttcibm8c

ttcibm8c1#

这被称为“颜色量化”。你有16. 777. 216种颜色,你想把它们Map到一个更小的数字(2到256)。
第一步:选择您要使用的颜色。首先是颜色的编号,然后是颜色本身。您需要选择是所有图像的颜色都是固定的,还是根据图像而改变(您需要为每个图像提供一个调色板)。
步骤2:用选择的颜色替换图像的颜色。
如果颜色是固定的,并且您希望保持 * 非常 * 简单,则可以使用每通道1位(总共8种颜色)或每通道2位(总共64种颜色)。
稍微复杂一点,以任何可能的方式使用每个通道0、51、102、153、204、255的这些值,导致216种不同的颜色组合。制作一个表格,将每种颜色组合与一个索引相关联。该索引需要8位(有一些备用)。这被称为“web安全调色板”(这让我回到了1999年末)。现在,您可以进行替换了:取图像中的每一个像素,量化后的颜色可以用x*6//256*51表示(//是整数除法)。
如果你想要一个更好看的调色板,寻找Median cut algorithm

qvtsj1bj

qvtsj1bj2#

只保留像素红色通道的最高有效位。对绿色和蓝色通道也是如此。然后使用C++的位操作操作将这些位值移动到单个字节中。有多种方法可以做到这一点。例如,在Internet上搜索“rgb332”作为一个示例(其中保留了3个红色位、3个绿色位和2个蓝色位)。

相关问题