Форум: "Начинающим";
Текущий архив: 2011.10.16;
Скачать: [xml.tar.bz2];
ВнизСоотношение сторон. Найти похожие ветки
← →
eXAAAXe (2011-06-23 18:21) [0]привет.
Помогите написать функцию, определяющую соотношение сторон.
мой вариант:
function EqualFloat(const F1, F2: single): boolean;
begin
Result:= CompareValue(F1, F2) = 0;
end;
function GetAspect(W, H: LongWord): string;
var
Aspect: single;
begin
Aspect:= (W / H);
If EqualFloat(Aspect, 4 / 3) then Result:= "4x3" else // 1.33.
If EqualFloat(Aspect, 5 / 4) then Result:= "5x4" else // 1.25.
If EqualFloat(Aspect, 16 / 9) then Result:= "16x9" else // 1.78.
If EqualFloat(Aspect, 16 / 10) then Result:= "16x10" else // 1.60.
Result:= "Unknown";
end;
у меня размеры монитора такие: 41 на 26. (Физические см.)
Т.е. 41 / 26 = 1.58 - функция вернут "Ункнавн".
как узнать соотношение моего монитора?
← →
Ega23 © (2011-06-23 18:44) [1]
> у меня размеры монитора такие: 41 на 26. (Физические см.
41 - простое число. Так что у тебя соотношение 41х26
← →
Anatoly Podgoretsky © (2011-06-23 19:21) [2]Формула w/h, у тебя оно 1.58
← →
CrytoGen (2011-06-23 20:24) [3]у тебя неправильный монитор
← →
Inovet © (2011-06-23 21:17) [4]> [3] CrytoGen (23.06.11 20:24)
> у тебя неправильный монитор
Линейка резиновая, по вертикали её растягивает притяжением, поэтому мерять надо в невесомости.
← →
eXAAAXe (2011-06-23 21:46) [5]
> у тебя неправильный монитор
почему не правильный?
диагональ 19.
← →
eXAAAXe (2011-06-23 21:58) [6]ok.
перечисляем разрешения через EnumDisplaySettings
функция вернет "Унканвн" для 1280 на 768.
Какое это соотношение???
← →
Игорь Шевченко © (2011-06-23 22:02) [7]
> Какое это соотношение???
http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0)
← →
eXAAAXe (2011-06-23 22:11) [8]
> Игорь Шевченко © (23.06.11 22:02) [7]
Спасибо.
← →
Омлет © (2011-06-24 08:36) [9]
function GetGCD(m, n: longword): longword;
var
p, n1, m1: longword;
begin
if (n = 0) or (m = 0) then
Result := 0
else begin
if m < n then begin
n1 := m;
m1 := n;
end
else begin
n1 := n;
m1 := m;
end;
while n1 > 0 do begin
p := m1 mod n1;
m1 := n1;
n1 := p;
end;
Result := m1;
end;
end;
function GetAspect(w, h: LongWord): string;
var
nod: longword;
begin
nod := GetGCD(w, h);
Result := format("%d:%d", [w div nod, h div nod]);
end;
← →
eXAAAXe (2011-06-24 11:56) [10]
> Омлет © (24.06.11 08:36) [9]
У меня размеры монитора 41 на 26 см.
Измерял линейкой и брал значения из реестра - цифры одни и те же.
GetAspect возвращает соотношение 41:26 :)
Но такого соотношения нет:
http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%28%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0%29
Не подскажите соотношение?
← →
eXAAAXe (2011-06-24 11:57) [11]GetGCD
Как переводиться GCD?
← →
Ega23 © (2011-06-24 12:12) [12]
> Как переводиться GCD?
http://lmgtfy.com/?q=GCD
← →
SQLEXPRESS (2011-06-24 12:38) [13]не понимаю, какой смысл в этом во всем?
причем размеры монитора, когда гораздо важнее размер пикселя матрицы?
← →
SQLEXPRESS (2011-06-24 12:41) [14]и размерность этой матрицы в пикселях.
← →
SQLEXPRESS (2011-06-24 12:43) [15]поясню, пусть пиксель будет 1,5х1
тогда 200 на 300 пикселей будет не 2:3, а очень даже 1:1
← →
Омлет © (2011-06-24 12:49) [16]> eXAAAXe (24.06.11 11:56) [10]
> У меня размеры монитора 41 на 26 см.
> Измерял линейкой и брал значения из реестра - цифры одни и те же.
В реестре есть размеры монитора в сантиметрах? Я не понял, чего вы хотите. Озвучьте прикладную задачу.
> Не подскажите соотношение?
Выставьте рекомендованное разрешение для вашего монитора - обычно это максимальное значение в настойках разрешения экрана. Возможно это 1920х1200 или 1600х1024, а может какое другое - зависит от монитора.
Потом эти размеры в пикселях передайте функции GetAspect - она вернет соотношение.
> Как переводиться GCD?
Наибольший общий делитель.
← →
eXAAAXe (2011-06-24 12:50) [17]
> SQLEXPRESS (24.06.11 12:38) [13]
Суть программы:
1) Узнать размеры монитора. (Уже сделал)
2) Узнать соотношение сторон.
У моего монитора размеры 41 на 26, вот и думай теперь.
← →
SQLEXPRESS (2011-06-24 12:56) [18]ну тогда тебе сразу уже ответили.
> 41 - простое число. Так что у тебя соотношение 41х26
а то что ты даешь ссылки - это не про размеры монитора. А про графические матрицы в них.
← →
eXAAAXe (2011-06-24 13:02) [19]
> Омлет © (24.06.11 12:49) [16]
> В реестре есть размеры монитора в сантиметрах? Я не понял,
> чего вы хотите. Озвучьте прикладную задачу.
Да есть.
См. EDID, 21 и 22 параметры.
> SQLEXPRESS (24.06.11 12:56) [18]
> а то что ты даешь ссылки - это не про размеры монитора.
> А про графические матрицы в них.
См. ниже "Компьютерные стандарты".
← →
eXAAAXe (2011-06-24 13:12) [20]
> ну тогда тебе сразу уже ответили.
>
> > 41 - простое число. Так что у тебя соотношение 41х26
У меня монитор не правильный?
← →
SQLEXPRESS (2011-06-24 13:38) [21]>> У меня монитор не правильный?
тебе виднее
>> См. ниже "Компьютерные стандарты".
Компьютерный стандарт / Название устройства Разрешение Соотношение сторон экрана Пиксели, суммарно
ну и где там про размеры самого монитора?
← →
eXAAAXe (2011-06-24 13:43) [22]
> SQLEXPRESS (24.06.11 13:38) [21]
>
> >> У меня монитор не правильный?
> тебе виднее
Это вопрос,а не утверждение Же!
> ну и где там про размеры самого монитора?
Название устройства и его разрешения в таблице.
← →
SQLEXPRESS (2011-06-24 13:47) [23]скажи уже разрешение ,
или хотя бы марку
уже даже мне стало интересно, правильный ли у тебя монитор ;-)
вот например мой -
http://market.yandex.ru/model-spec.xml?modelid=929294&hid=91052
то есть, все понятно, SXGA 1280×1024 5÷4
← →
eXAAAXe (2011-06-24 13:57) [24]
> SQLEXPRESS (24.06.11 13:47) [23]
У меня такой.
http://market.yandex.ru/model-spec.xml?modelid=6100149&hid=91052
1440 x 900 = 8 к 5.
Информация из EDID: 41 на 26 см.
EDID врёт что ли???
← →
Palladin © (2011-06-24 13:59) [25]пиксели дело такое... редко идеально квадратное....
← →
SQLEXPRESS (2011-06-24 14:02) [26]т.е.
WSXGA or WXGA+ (?) 1440×900 16÷10 1 296 000
или, сократив на 2, да 8÷5.
>> EDID врёт что ли???
может
← →
eXAAAXe (2011-06-24 14:11) [27]Делал как тут советуют:
http://www.gamedev.ru/code/forum/?id=94134
← →
Омлет © (2011-06-24 14:34) [28]> http://www.gamedev.ru/code/forum/?id=94134
Там есть действительно правильный совет:
"Погугли, есть WinAPI функция, которая перечисляет все доступные разрешения для монитора, а не для видеокарты. Берёшь самое максимальное и вычисляешь соотношение сторон."
← →
eXAAAXe (2011-06-24 14:41) [29]
> Омлет © (24.06.11 14:34) [28]
Придется, так.
← →
SQLEXPRESS (2011-06-24 14:59) [30]ну да, откуда-то отсюда начать
http://msdn.microsoft.com/en-us/library/dd162610%28v=VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/aa920775.aspx
а в простейшем варианте я б написал
function GetAspect(W, H: LongWord): string;
var
Aspect: single;
begin
if H = 0 then
begin
W := GetSystemMetrics(SM_CXSCREEN); // текущее
H := GetSystemMetrics(SM_CYSCREEN);
end;
Aspect:= (W / H);
If EqualFloat(Aspect, 4 / 3) then Result:= "4x3" else // 1.33.
If EqualFloat(Aspect, 5 / 4) then Result:= "5x4" else // 1.25.
If EqualFloat(Aspect, 16 / 9) then Result:= "16x9" else // 1.78.
If EqualFloat(Aspect, 16 / 10) then Result:= "16x10" else // 1.60.
Result:= "Unknown";
end;
← →
Омлет © (2011-06-24 15:18) [31]> SQLEXPRESS (24.06.11 14:59) [30]
Лучше EnumDisplaySettingsEx.
← →
eXAAAXe (2011-06-24 16:13) [32]
> Омлет © (24.06.11 15:18) [31]
> Лучше EnumDisplaySettingsEx.
Можно обычный EnumDisplaySettings.
← →
eXAAAXe (2011-06-25 10:46) [33]EnumDisplaySettings максимальное возвращает разрешение: 1440 x 1050
А тут:
http://market.yandex.ru/model-spec.xml?modelid=6100149&hid=91052
Максимальное 1440x900.
Кому верить?
← →
UP (2011-06-25 19:14) [34]Удалено модератором
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.10.16;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.004 c