Проблема преобразования цвета Android

Я пытаюсь выполнить преобразование цвета между RGB и HSV и обратно в RGB. Это для программы выбора цвета HSV, которую я создаю. Я получаю компоненты HSV. Я хочу установить новую насыщенность строго для своего цвета, поэтому установите значение Saturation равным запрошенному значению. Затем я конвертирую его обратно в RGB. Однако значение оттенка изменилось, и я его не запрашивал. Кроме того, если я постоянно перемещаю ползунок «Насыщенность», оттенок в конечном итоге выравнивает цвет с голубым, желтым или пурпурным, которые имеют оттенки 60, 180 и 300. Есть ли способ, чтобы оттенок не менялся при настройке насыщенности? ?

ПРИМЕЧАНИЕ. getHue, getSaturation и getValue извлекают компонент HSV colorCode.

public void setSaturation(float s)
{
    float hsv[];
    hsv = new float[3];
    Log.i("Before change",String.valueOf("H: "+getHue()+" S: "+getSaturation()+" V: "+getValue()));
    Color.RGBToHSV(getRed(), getGreen(), getBlue(), hsv);
    hsv[1] = s;
    colorCode = Color.HSVToColor(hsv);
    Log.i("After change",String.valueOf("H: "+getHue()+" S: "+getSaturation()+" V: "+getValue()));
}

До изменения (21558): H: 28,771929 S: 0,67058825 V: 1,0

После изменения (21558): H: 28,928572 S: 0,65882355 V: 1,0


person Arzeimuth    schedule 21.04.2012    source источник


Ответы (1)


преобразование из rgb в hsv нелинейно, а точность с плавающей запятой недостаточно высока, чтобы получить преобразование без потерь. Здесь вы можете найти решение для целочисленного преобразования без потерь. Его С++, но его должно быть достаточно легко преобразовать в java.

person Renard    schedule 21.04.2012