![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в OpenGL повысить яркость [D6, Win95/98]
Agent[007] © (2004-09-07 23:02:00)subj.
OSokin (2004-10-08 20:24:00) [1]Если юзаешь текстуры - достаточно просто выключением/включением режима текстурирования
XProger (2004-09-11 03:42:00) [2]
// получение текущей гаммы
function xglGamma_Get: integer;
var
ramp : array [0..256 * 3 - 1] of WORD;
rgb : array [0..2] of double;
sum : double;
count : integer;
min : integer;
max : integer;
A, B : double;
i, j : integer;
begin
rgb[0] := 1;
rgb[1] := 1;
rgb[2] := 1;
GetDeviceGammaRamp(DC, ramp);
// проходим по цветам в rgb
for i := 0 to 2 do
begin
sum := 0;
count := 0;
min := 256 * i;
max := min + 256;
// разбираем формулу из xglGamma_Set
for j := min to max - 1 do
if ramp[j] > 0 then
begin
B := (j mod 256)/256;
A := ramp[j]/65536;
sum := sum + ln(A)/ln(B);
inc(count);
end;
rgb[i] := sum / count;
end;
Result := 100 - trunc(((rgb[0] + rgb[1] + rgb[2])/3 - 0.23) * 100/(2.7 - 0.23));
end;
// установка гаммы (0 - темно 100 - ярко)
procedure xglGamma_Set(gamma: integer);
var
ramp : array [0..256*3 - 1] of WORD;
i : integer;
r : double;
g : double;
function Pow(x, y: double): double;
begin
Result := exp(y * ln(x));
end;
begin
xglGamma := gamma;
g := (100 - gamma)*(2.7 - 0.23)/100 + 0.23;
for i := 0 to 255 do
begin
r := pow(i/256, g)*65536;
if r < 0 then
r := 0
else
if r > 65535 then
r := 65535;
ramp[i] := trunc(r);
ramp[i + 256] := trunc(r);
ramp[i + 512] := trunc(r);
end;
SetDeviceGammaRamp(DC, ramp);
end;
miek (2004-09-10 08:09:00) [3]Кроме частных способов - только через API, SetDeviceGammaRamp.
Agent[007] (2004-09-08 17:39:00) [4]Изображения... Кроме способа с уменьшением\увеличением цвета...
miek (2004-09-08 08:10:00) [5]Яркость чего?
subj