Gamma

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Gamma

Сообщение GLEB » 30.08.2005 (Вт) 11:22

Как сделать экран более светлым или темным?
Вроде SetGammaRamp, там массив, по-всякому его заполнял черный экран и всё. Или это совсем не то?

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 31.08.2005 (Ср) 10:16

Что-то тут странно как-то сделано. Элементы типа D3DGAMMARAMP объявлены как integer и макс. значение может быть 32767. В Си это значение задаётся от 0 до 65535. Если установить всем элементам 0, то экран черный, если 65535 - белый. А в VB 32767 - это только середина, т. е. серый цвет, а больше не прёт - owerflow, и что тогда делать.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 31.08.2005 (Ср) 11:41

ДА я тоже щас порылся в этом
Странно то что если поставить взятую гамму то получается черный экран
У меня получилось чтто то разглядеть
только заполнив массивы так
for i=0 to 255
ramp.red(i)=128*i
...
next i

но при этом светлость упала в 2 раза

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 31.08.2005 (Ср) 11:49

Функция GetGammaRamp почему-то возвращает значения только от 0 до 255, поэтому экран и черный. Макс. знач должно быть 65535, в Си эти массивы типа WORD, а в VB почему-то Integer.

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 31.08.2005 (Ср) 12:59

WORD это и есть Integer.

Код: Выделить всё
Public Sub ChangeGamma(Gamma As Single)

   Dim a As D3DGAMMARAMP, G As Single, i As Integer
   Device.GetGammaRamp a
   
    Dim t As Long
    For i = 0 To 255
        t = i * Gamma * 255
        G = 0
        If t > 32767 Then G = 1: t = t - 32767
        If t > 32767 Then t = 32767
       
        a.Red(i) = t Or (&H8000 * G)
        a.Green(i) = t Or (&H8000 * G)
        a.Blue(i) = t Or (&H8000 * G)
     
    Next i
   
    Device.SetGammaRamp 0, a
End Sub
ХЎ

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 02.09.2005 (Пт) 10:48

WORD - это unsigned integer.
А почему элементы типа D3DGAMMARAMP в VB объявлены как integer, ну объявили бы их как Long и всё, а то так далеко не каждый разберется.
Кстати, d3drm, что за значение &H8000?
И еще вопрос. Как с помощью твоей функции получить текущую гамму и установить её?
ChangeGamma(1) - все более темное, а GetGammaRamp возвращает (0..255)?

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 02.09.2005 (Пт) 16:16

собсно все равно, без знаковый там integer или со знаком, положительные значения одинаковые.

&H8000 - это -32768. догадайся, что это за волшебное число :wink:

а текущая гамма, это значение параметра равное единице. при нуле экран черный, при двух - вообще белый.
ХЎ

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 17.11.2005 (Чт) 14:17

а текущая гамма, это значение параметра равное единице.

При 1 экран намного темнее.
И какая закономерность между GetGammaRamp и SetGammaRamp????
Как прочитать текущую палитру и установить ее ????


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList