Форум — Ответы     (  К темам )
 ?  Cseno: Вопрос по графике.Програмно изменить яркость,паллитру...битмапа... (16-01-2003 03:39:33)
Доброго времени суток.Вопрос наверное немного не в формате данного форума.

Недавно мой друг сделал скринсэйвер во флэш,суть его работы в следующем:
на экране появляется картинка,начинает темнеть до полной черноты,появляется следующая картинка начинает темнеть и.т.д. Эффект изменения яркости он сделал...просто засунув в
ресурсы по 5 "разноярких" вариантов каждой картинки и потом просто выводил их одну за другой .Размер скринсэйвера > 5mb.

Вопрос такой : можно ли програмно(не во флэше) менять такие параметры битмапа(или других форматов)
как яркость,паллитру,контрастность... и если да то как это можно сделать ?
(Или сделать видимость -- например рисовать на рисунке черной полупрозрачной кистью?-яркость...?)

Зарание спасибо.
 Devnvd (17-01-2003 19:39:09)
Для изменения параметров яркости, контрастности ... переведите цвет пиксела из RGB в HLS, измените коэффициенты, а затем переведите обратно в RGB.

Смешивание цветов двух пикселов.

char rgb1[3],rgb2[3],rgb[3];
WORD hls1[3],hls2[3],hls[3];
COLORREF Rgb;
//Получаем RGB пиксела картинки 1 и переводим в HLS
rgb1[0]=*ptr1++; rgb1[1]=*ptr1++; rgb1[2]=*ptr1++;
Rgb=RGB(rgb1[0],rgb1[1],rgb1[2]);
ColorRGBToHLS(Rgb,&hls1[0],&hls1[1],&hls1[2]);

//Получаем RGB пиксела картинки 2 и переводим в HLS
rgb2[0]=*ptr2++; rgb2[1]=*ptr2++; rgb2[2]=*ptr2++;
Rgb=RGB(rgb2[0],rgb2[1],rgb2[2]);
ColorRGBToHLS(Rgb,&hls2[0],&hls2[1],&hls2[2]);

//Смешиваем два изображения в нужных пропорциях
hls[0]=hls1[0]+(hls2[0]-hls1[0])*Iter/100;
hls[1]=hls1[1]+(hls2[1]-hls1[1])*Iter/100;
hls[2]=hls1[2]+(hls2[2]-hls1[2])*Iter/100;

Rgb=ColorHLSToRGB(hls[0],hls[1],hls[2]);