-
Валера (04.05.12 22:42) [0]Функция SetDeviceGammaRamp использует структуру:
type
TRampLut = array [0..255] of word;
TRamp = packed record
R, G, B: TRampLut;
end;
Т.е. TLut не схож с этим Lutом.
Как преобразовать TLut в TRampLut?
Накатал 2 функции, думаю они не правильно работают:
function LutToRampLut(Lut: TLut): TRampLut;
var
i: byte;
begin
For i:= 0 to 255 do
Result[i]:= ByteToWord(Lut[i]); // из одного диапазона в другой.
end;
function LutToRampLut2(Lut: TLut): TRampLut;
var
i: byte;
begin
For i:= 0 to 255 do
Result[i]:= Lut[i];
end; -
Sapersky (05.05.12 12:56) [1]Примеры использования SetDeviceGammaRamp легко гуглятся:
http://www.efg2.com/Lab/Library/UseNet/2002/0914.txt
В LUT'е те же байты, но сдвинутые в "верхнюю" часть Word'а. -
Валера (05.05.12 18:16) [2]Понятно.
-
Валера (05.05.12 18:22) [3]А, нет, так что ли?
Не работает.
function LutToRampLut(Lut: TLut): TRampLut;
var
i: byte;
begin
For i:= 0 to 255 do
Result[i]:= (Lut[i] shl 8);
end; -
Sapersky (05.05.12 21:04) [4]SetDeviceGammaRamp сама по себе может не работать (возвращает false), если драйвер не поддерживает.
-
Валера (13.05.12 18:21) [5]
> SetDeviceGammaRamp сама по себе может не работать (возвращает
> false), если драйвер не поддерживает.
Поддерживает.
Я просто хотел сделать изменение гаммы, яркости и контрастности как в
Сталкере на весь экран. -
Sapersky (13.05.12 22:57) [6]Сталкер, скорее, D3D-шные методы дёргает.
Попробуй получить текущую гамму через GetDeviceGammaRamp, посмотреть что там.
Как вариант - прогнать всю свою графику после загрузки из файлов через LUT, эффект должен быть примерно тот же, что и от глобальной гаммы.