Форум: "WinAPI";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
ВнизКак изменить яркость монитора и контрастность Найти похожие ветки
← →
Sergeika (2004-10-03 06:33) [0]Значит нужно сделать так, что бы можно было узнать какая сейчас яркость установлена в настройках для монитора и потом её изменить.
В MSDN СКАЗАНО, что нужно юзать ChangeDisplaySettingsEx.
Так вот юзал, а толку нет, не хочет работать.
Кто сталкивался с подобной задачей или может просто знает как, помогите разобраться.
Зараннее благодарен.
← →
KilkennyCat © (2004-10-03 07:46) [1]как же Вы ее юзали-то?
LONG ChangeDisplaySettingsEx(
LPCTSTR lpszDeviceName,
LPDEVMODE lpDevMode,
HWND hwnd,
DWORD dwflags,
LPVOID lParam);
lpszDeviceName - это у нас девайс
lpDevMode - имеет следующее:
dmBitsPerPel
dmPelsWidth
dmPelsHeight
dmDisplayFlags
dmDisplayFrequency
dmPosition
hwnd - ну это явно
dwflags - флажок, все перечислять не буду, наиболее интересный - CDS_VIDEOPARAMETERS
что с ним можно:
ежели он стоит, то lParam указывает на следующее:
dwOffset;
dwCommand;
dwFlags;
dwMode;
dwTVStandard;
dwAvailableModes;
dwAvailableTVStandard;
dwFlickerFilter;
dwOverScanX;
dwOverScanY;
dwMaxUnscaledX;
dwMaxUnscaledY;
dwPositionX;
dwPositionY;
dwBrightness; ----- вот они!
dwContrast; -----/
dwCPType;
dwCPCommand;
dwCPStandard;
dwCPKey;
bCP_APSTriggerBits;
bOEMCopyProtection[256];
Что сложного?
← →
XProger © (2004-10-03 08:30) [2]
// получение текущей гаммы в процентах (69% по дефолту у большинства)
function xglGamma_Get: integer; stdcall;
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); stdcall;
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;
← →
KilkennyCat © (2004-10-03 16:27) [3]хе... а я-то, дурилка картонная, считал всегда, что гамма - это вовсе не яркость с контрастностю...
← →
Sergeika (2004-10-05 21:37) [4]Мне нужно изменить либо контрастность либо яркость, так как это можно сделать кнопками на мониторе. KilkennyCat © привёл структуру, какую надо, только вот напишите как её использовать и инизиализировать.
Заранне благодарен.
← →
Sergeika (2004-10-05 21:37) [5]Мне нужно изменить либо контрастность либо яркость, так как это можно сделать кнопками на мониторе.
KilkennyCat © привёл структуру, какую и надо, только вот напишите как её использовать и инизиализировать.
Заранне благодарен.
← →
Sergeika (2004-10-06 21:42) [6]Ну кто-нибудь помогите. Мастера!!!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.051 c