2012-04-21 5 views
1

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

Примечание: getHue, getSaturation и ПолучитьЗначение извлекаются 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

ответ

1

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

Смежные вопросы