Я пытаюсь создать подборщик цветов, который использует только один слайдер. Я знаю, что это не допустит для всех цветов, и я не смогу настроить альфа, оттенок и насыщенность. Есть много примеров выбора цвета. Один общий выбор цвета включает использование квадрата и линейного спектра. Квадрат, позволяющий изменять оттенок и насыщенность. Мне просто нужны значения линейного спектра. Я хотел бы сделать это с помощью некоторых алгоритмов, но я не могу придумать, как его запустить. В худшем случае я мог бы использовать массив с цветами и просто использовать значение индикатора выполнения в качестве индекса.Выбор цвета с одним слайдером
0
A
ответ
0
Я не уверен, но я думаю, вы можете думать об этом таким образом.
Чтобы представить все цвета в одном значении, вам нужно 1 байт для синего, 1 байт для красного и 1 байт для зеленого.
поэтому вы можете это сделать.
пусть слайдер будет 0 до 0xFFFFFF
затем отфильтровать значение по:
#include <stdio.h>
int main()
{
int color = 0x0aFF0b;
int r = ((0xff << 4) & color) >> 4;
int g = ((0xff << 2) & color) >> 2;
int b = ((0xff) & color);
printf("r: %x\n", r);
printf("r: %x\n", g);
printf("r: %x\n", b);
return 0;
}
затем просто подключить эти значения в цвете, и использовать его.
2
Я придумал следующий код, который соответствует тому, что я хотел сделать довольно хорошо. Он может быть изменен, чтобы обеспечить больший диапазон значений. Код довольно грубый, но я думаю, вы поняли.
public int getColorFromProgress(int progress)
{
int color1 = 0, color2 = 0, color = 0;
float p = (float)progress;
if(progress <= 10) /* black to red */
{
color1 = 0;
color2 = 0xff0000;
p = progress/10.0f;
}
else if(progress <= 25) /* red to yellow */
{
color1 = 0xff0000;
color2 = 0xffff00;
p = (progress - 10)/15.0f;
}
else if(progress <= 40) /* yellow to lime green */
{
color1 = 0xffff00;
color2 = 0x00ff00;
p = (progress - 25)/15.0f;
}
else if(progress <= 55) /* lime green to aqua */
{
color1 = 0x00ff00;
color2 = 0x00ffff;
p = (progress - 40)/15.0f;
}
else if(progress <= 70) /* aqua to blue */
{
color1 = 0x00ffff;
color2 = 0x0000ff;
p = (progress - 55)/15.0f;
}
else if(progress <= 90) /* blue to fuchsia */
{
color1 = 0x0000ff;
color2 = 0x00ff00;
p = (progress - 70)/20.0f;
}
else if(progress <= 98) /* fuchsia to white */
{
color1 = 0x00ff00;
color2 = 0xff00ff;
p = (progress - 90)/8.0f;
}
else
{
color1 = 0xffffff;
color2 = 0xffffff;
p = 1.0f;
}
int r1 = (color1 >> 16) & 0xff;
int r2 = (color2 >> 16) & 0xff;
int g1 = (color1 >> 8) & 0xff;
int g2 = (color2 >> 8) & 0xff;
int b1 = (color1) & 0xff;
int b2 = (color2) & 0xff;
int r3 = (int) ((r2 * p) + (r1 * (1.0f-p)));
int g3 = (int) (g2 * p + g1 * (1.0f-p));
int b3 = (int) (b2 * p + b1 * (1.0f-p));
color = r3 << 16 | g3 << 8 | b3;
return color;
}
Смежные вопросы
- 1. Управление одним слайдером JQuery Mobile
- 2. Выбор цвета с редактором
- 3. Выбор цвета с непрозрачностью
- 4. QColorPicker с ярким слайдером
- 5. Как сделать круговой карусель слайдером только с одним направлением?
- 6. Две платы с одним и тем же слайдером (jsxGraph), возможны?
- 7. Выбор коробки с выбором цвета
- 8. UIButton с UITableViewCellSelectionStyleGray Выбор цвета
- 9. display.js выбор цвета фона
- 10. WP7 выбор цвета
- 11. Выбор Название цвета неизменен
- 12. Выбор цвета градиента Div
- 13. Метеор случайный выбор цвета
- 14. Мой выбор цвета jQuery
- 15. Проблема с слайдером javascript
- 16. Застрял с простым слайдером
- 17. Меню asp.net с слайдером
- 18. Scale ImageView с слайдером
- 19. Изотоп jQuery с слайдером
- 20. Qt Widget с слайдером
- 21. Проблемы с слайдером JQuery
- 22. Открытие изображений с слайдером
- 23. взаимодействие qvtkwidget с слайдером
- 24. Parse Audio с слайдером
- 25. Проблемы с слайдером видео
- 26. Магистраль с слайдером
- 27. Проблемы с адаптивным слайдером
- 28. Проблема с слайдером
- 29. Android: простой выбор цвета
- 30. JTable - выбор цвета линии
Это работает, однако, очень сложно для пользователя выбрать цвет, поскольку существует так много возможных значений. – lostdev