Конференция "Игры" » Преобразование Lut [Delphi, Windows]
 
  • Валера (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, эффект должен быть примерно тот же, что и от глобальной гаммы.
 
Конференция "Игры" » Преобразование Lut [Delphi, Windows]
Есть новые Нет новых   [106965   +40][b:0.001][p:0.002]