Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 14 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 13.11.2004
Подскажите как регулировать яркость/контраст для 3D приложений и для системы.



Партнер
 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Код:


(******************************************************************************
                           A3D nGine 2003
                    a3d.intelligentdevelopment.sk
                   kollar@intelligentdevelopment.sk

                    Open Source 3D Graphics Engine

 ******************************************************************************
 *                                                                            *
 * This program is distributed in the hope that it will be useful,            *
 * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
 * GNU General Public License for more details.                               *
 *                                                                            *
 ******************************************************************************)
unit A3D_GAMMA;

interface
uses math, windows;

type

  TGammaRamp = packed record
    R, G, B: array[0..255] of Word;
  end;

procedure A3D_StoreOriginalGamma(dc: HDC);
procedure A3D_SetNewGamma(dc: HDC; val: single);
procedure A3D_RestoreGamma(dc: HDC);

var
  originalRamp, adjustedRamp: TGammaRamp;

implementation

procedure A3D_StoreOriginalGamma(dc: HDC);
begin

  // Get the system's current gamma ramp, so we can restore later.
  FillChar(originalRamp, SizeOf(originalRamp), 0);
  GetDeviceGammaRamp(dc, originalRamp);
  adjustedRamp := originalRamp;


end;

procedure A3D_SetNewGamma(dc: HDC; val: single);
var i, v            : integer;
begin
  for i := 0 to 255 do
  begin
    v := Round(255 * Power(i / 255, val));
    if v > 255 then v := 255;
    // You can adjust each curve separately, but you usually shouldn't need to.
    adjustedRamp.R[i] := v shl 8;
    adjustedRamp.G[i] := v shl 8;
    adjustedRamp.B[i] := v shl 8;
  end;

  // Send the adjusted gamma ramp to the video card.
  SetDeviceGammaRamp(dc, adjustedRamp);


end;

procedure A3D_RestoreGamma(dc: HDC);
begin
  SetDeviceGammaRamp(dc, originalRamp);
end;
end.



Вот примерный код
остальное тут
http://www.koders.com/delphi/fid4D28FB4 ... D8215.aspx


 

Member
Статус: Не в сети
Регистрация: 13.11.2004
Ray Adams - спасибо.


 

Member
Статус: Не в сети
Регистрация: 13.11.2004
Ray Adams - пример можно накидать? Ибо не знаю где взять dc: HDC.


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Angel_19
Цитата:
Ибо не знаю где взять dc: HDC.
Ты что не знаешь на чем рисуешь? DC - это дескриптор окна, на которое ты выводишь изображение.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 13.11.2004
Lord_of_Darkness - я то нигде не рисую. Мне надо изменять яркость/контраст не моих программ. А рабочего стола и/или игрушек.


 

Member
Статус: Не в сети
Регистрация: 26.07.2003
Откуда: Ленинград
Angel_19 писал(а):
Lord_of_Darkness - я то нигде не рисую. Мне надо изменять яркость/контраст не моих программ. А рабочего стола и/или игрушек.


используй функции FindWindow (по кэпшену окна возвращает его хэндл) и GetDC (по хэндлу окна возвращает дескриптор контекста)

_________________
старый морской думер.


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
GetDC (0) - Выдаст ВС для всего экрана.


 

Member
Статус: Не в сети
Регистрация: 13.11.2004
Ray Adams - не работает пример. Или не так использую.


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Angel_19 писал(а):
Или не так использую.

Вот это скорее всего :)


 

Member
Статус: Не в сети
Регистрация: 13.11.2004
А как правильно не подскажите?


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Angel_19 Так как я написал выше. Это код из готового 3Д движка и он польностью рабочий. Я не знаю что ты там не так делаеш 8-)


 

Member
Статус: Не в сети
Регистрация: 13.11.2004
Ray Adams - спасибо, разобрался, все работает.


 

Добрый день, Ray Adams.
Или может быть еще кто-нибудь поможет.

Я нашел на форуме Ваше сообщение по поводу изменения яркости приложения. Что-то у меня не выходит.
Нужно изменить яркость конкретного приложения, а не всего экрана. А лучше конкретной области экрана с некоторыми координатами.
Вот мой код, я из одного приложения пытаюсь изменить яркость другого приложения:

Procedure.......;
var ZAppName: array[0..127] of char;
Hold: String;
Found: HWND;

begin
Hold := 'Система управления туалетом';
StrPCopy(ZAppName, Hold);
Found:=FindWindow(Nil, ZAppName);
DCFORM:=GetDC(Found);
A3D_StoreOriginalGamma(DCFORM);
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
A3D_SetNewGamma(DCFORM, 2.5-ScrollBar1.Position/10);
Label1.Caption := ' Степень яркости приложения' + IntToStr(ScrollBar1.Position);
end;

DCFORM ищется, по крайней мере не ноль. Но яркость изменяется всего экрана, а не данного найденного приложения. Странно, может быть я что-то не так делаю.

И еще вопрос, если можно. Как изменить ярколсть только определенного куска экрана с некоторыми координатами?

Заренее, спасибо.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 14 
-

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan