完美将Java的24位RGB转换为8位256色的算法

时间:2018-12-17 02:15:15

标签: java colors rgb 8-bit 256color

是的,我确实在Google上进行搜索,但没有找到理想的算法。

我所拥有的:(这也是janlelis/paint中使用的算法)

/**
 * Convert rgb to 8bit
 *
 * @param r Red
 * @param g Green
 * @param b Blue
 * @return 8Bit color
 */
public static int rgbTo8Bit(int r, int g, int b)
{
    boolean grayPossible = true;
    boolean gray = false;
    float sep = 42.5f;

    while (grayPossible)
    {
        if (r < sep || g < sep || b < sep)
        {
            gray = r < sep && g < sep && b < sep;
            grayPossible = false;
        }
        sep += 42.5;
    }

    if (gray)
    {
        return Math.round(232f + (r + g + b) / 33f);
    }
    else
    {
        return 16 + ((int) (6f * ((float) r / 256f))) * 36 + ((int) (6f * ((float) g / 256f))) * 6 + ((int) (6f * ((float) b / 256f)));
    }
}

结果: (转换后的8位结果在顶部,原始RGB在底部)

Results

除了上图中显示的灰点外,它们几乎都是完美的。有可以解决此问题的算法吗?

0 个答案:

没有答案