Градиент

Здравствуйте.
Уже 2 дня пытаюсь решить масенькую траблу. А именно сплодить на Си функцию которая будет выводить на дисплей (LS020) прямоугольник, но не простой, а градиентный(заполнение) от красного до синего.
Суть этого процесса в отображении положения регулятора температуры. Нарисовать прямоугольник не проблема… проблема сделать его градиентным.
Помогите плз, может кто знает как это делается. Дисплей переваривать 16и битные цвета
  • 0
  • 31 августа 2011, 11:46
  • Geban

Комментарии (7)

RSS свернуть / развернуть
void DrawRect(int x1, int y1, int x2, int y2){
for (int x = x1; x <= x2; x++){
char R = (x2-x) * 255 / (x2-x1);
char G = 0;
char B = 255 — R;
for (int y = y1; y <= y2; y++){
PutPixel(x, y, R, G, B);
}
}
}
0
  • avatar
  • _pv
  • 31 августа 2011, 13:44
Классно!
просто и красиво ))
0
Гм. Стандартный же код. Обычный LERP двух цветов. Его сложно сделать сложнее. Разве что работать прямо с 16-бит 565.
0
Ну да, стандартный… Код как код, но всё равно меня почему-то радует)))
Блин, на первом курсе была лаба по программированию была, там много чего подобного применял. Надо было красивую менюшку нарисовать.
0
Более чем, базовая операция. У меня в SynTex'е (генератор процедурных текстур) половина фильтров LERP между двумя цветами юзала.
Здесь правда операция несколько упрощена за счет того, что цвета зафиксированы и довольно удобные.
0
  • avatar
  • Vga
  • 01 сентября 2011, 18:23
Можно оптимизировать то, что есть. Или написать более общую функцию, для интерполяции любых заданных в вершинах цветов, и в этом случаем для оптимизации места ещё больше.
0
Большое спасибо, все работает :)
0
  • avatar
  • Geban
  • 31 августа 2011, 14:33
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.