Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 311
1

Разрешение экрана монитора

10.07.2016, 21:29. Показов 6439. Ответов 8

Author24 — интернет-сервис помощи студентам
У меня монитор 15' 1024*768.
Для определения разрешения монитора применяем свойство PixelPerInch:
C++
1
int dpi1=Screen->PixelPerInch; // получим dpi1=96 (на моём мониторе)
а реальное разрешение:
C++
1
int dpi2=sqrtl(1024*1024+768*768)/15.0; // получим dpi2=85.333
Если выводить на монитор графику, а потом изменять линейкой, то близко к истине разрешение 85.333, т.е. рассчитанной не по свойству PixelPerInch.
Так в чём здесь подвох?
Кто-нибудь этой темой интересовался?
А может в OS тупо заложены определённые значения разрешений и комп выдаёт близкие?

Добавлено через 2 часа 49 минут
Добавлю.
Противоречия в выходных данных:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//ЭКРАН МОНИТОРА: ширина, высота, разрешение(вложенное и расчётное)
  HDC hDCScreen = GetDC(NULL);
  int Hpix = GetDeviceCaps(hDCScreen, HORZRES);//ширина экрана, pix
  int Vpix = GetDeviceCaps(hDCScreen, VERTRES);//высота экрана, pix
  int Hmm = GetDeviceCaps(hDCScreen, HORZSIZE);//ширина экрана, мм
  int Vmm = GetDeviceCaps(hDCScreen, VERTSIZE);//высота экрана, мм
  int Xdpi = GetDeviceCaps(hDCScreen, LOGPIXELSX);//разрешение экрана по ширине, dpi
  int Ydpi = GetDeviceCaps(hDCScreen, LOGPIXELSY);//разрешение экрана по высоте, dpi
  ReleaseDC(NULL, hDCScreen);
  double Hdpi=Hpix*25.4/Hmm; //разрешение экрана по ширине, dpi
  double Vdpi=Vpix*25.4/Vmm; //разрешение экрана по высоте, dpi
  ShowMessage("Hpix = "+IntToStr(Hpix)+
              "\nVpix = "+IntToStr(Vpix)+
              "\nHmm = "+IntToStr(Hmm)+
              "\nVmm = "+IntToStr(Vmm)+
              "\nHdpi = "+FloatToStr(Hdpi)+
              "\nVdpi = "+FloatToStr(Vdpi)+
              "\nXdpi = "+IntToStr(Xdpi)+
              "\nYdpi = "+IntToStr(Ydpi)
             );
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2016, 21:29
Ответы с готовыми решениями:

Разрешение приложения - чтобы приложение подстраивалось под разрешение экрана
Можно ли средствами c++ bulder сделать так, чтобы разрешение приложения подстраивалось под...

Разрешение монитора
Доброго времени суток! Вопрос такого содержания: CodeGear™ C++Builder® . как сделать программу...

Самое популярное разрешение экрана
Какое разрешение экрана поддерживается всеми компьютерами? Начинаю делать игру. С самого запуска...

Форма под любое разрешение экрана
Подскажите как сделать чтобы форма подходила под любое разрешение экрана. И подскажите как сделать...

8
случайный прохожий
2934 / 1951 / 606
Регистрация: 20.07.2013
Сообщений: 5,160
11.07.2016, 11:55 2
Дело наверно в том, что есть физический и логический дюйм.
LOGPIXELSX Число пикселей на логический дюйм по экранной ширине. В системе с много экранными мониторами, это значение одно и то же для всех мониторов.
LOGPIXELSY Число пикселей на логический дюйм по экранной высоте. В системе с много экранными мониторами, это значение одно и то же для всех мониторов.
Логический дюйм - это мера, которую система использует для представления четких шрифтов на экране, и он приблизительно от 30 до 40 процентов больше, чем физический дюйм. Использование логических дюймов препятствует точному соответствию между выводом данных на экране и принтере. Разработчики должны знать, что текст на экране не просто масштабируемая версия текста, который появится на странице, особенно если в текст включена графика.
0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 311
11.07.2016, 12:27  [ТС] 3
Цитата Сообщение от gunslinger Посмотреть сообщение
Логический дюйм - это мера, которую система использует для представления четких шрифтов на экране, и он приблизительно от 30 до 40 процентов больше, чем физический дюйм. Использование логических дюймов препятствует точному соответствию между выводом данных на экране и принтере. Разработчики должны знать, что текст на экране не просто масштабируемая версия текста, который появится на странице, особенно если в текст включена графика.
Я в своём примере забыл выложить данные по своему монитору:
Hpix=1024
Vpix=768
Hmm=300
Vmm=225
Hdpi=86.6986666 - разрешение точек на физический дюйм
Vdpi=86.6986666
Xdpi=96 - разрешение точек на логический дюйм
Ydpi=96
Разница между логическим разрешением и физическим +10,4%
Но возникает вопрос, а для чего такой параметр, как "разрешение на логический дюйм"?
0
случайный прохожий
2934 / 1951 / 606
Регистрация: 20.07.2013
Сообщений: 5,160
11.07.2016, 13:56 4
Нашел такое описание:
...Объясняется стандартной формулой перевода размера шрифта из поинтов в пиксели. Font size (px) = size (pt) * dpi (y) / 72. Логический дюйм нужен для форсирования (масштабирования) размеров шрифтов на мониторе, играет роль некоторого коэффициента. Потому что пользователю не важно соответствие размера шрифта на мониторе реальным физическим величинам, ему важно, чтобы шрифт на его мониторе с конкретным разрешением выглядел нормально и читабельно. По-умолчанию в Windows выставлен в 96.
Объясняется стандартной формулой перевода размера шрифта из поинтов в пиксели

что такое поинт? и почему 72?

как я себе это представляю, в логических координатах у нас может быть сколько угодно единиц, хоть 60000 х 60000 (или всё наоборот нормировано в диапазоне [0 1]), в физических же координатах мы имеем совершенно определенные цифры, как разрешения экрана 1280 х 1024 , в моём же случае это размер изображения m x n пикселей.
1
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 311
12.07.2016, 14:53  [ТС] 5
gunslinger, может вы подскажете адрес ресурса, где любители могут размещать свои программки, как портфолио, для просмотра будущими работодателями.
0
случайный прохожий
2934 / 1951 / 606
Регистрация: 20.07.2013
Сообщений: 5,160
12.07.2016, 16:31 6
Насчет других ресурсов не скажу (мало где еще постоянно бываю), а здесь можно блог вести: https://www.cyberforum.ru/blog_post.php?do=newblog
при выполнении нехитрых условий
Не менее 5 сообщений, неотрицательная репутация, не менее 2 дней на форуме.
или альбом использовать https://www.cyberforum.ru/album.php?do=addalbum
но тут вроде нужно
Не менее 100 сообщений, неотрицательная репутация.
насколько я понял из темы Права пользователей форума

Добавлено через 7 минут
Или здесь темы создавать: https://www.cyberforum.ru/beta-testing/
Для раздела фриланс доступа еще нет, но в будущем можно примеры своих работ выложить в теме, созданной тут https://www.cyberforum.ru/freelancers-offers/
0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 311
12.07.2016, 21:26  [ТС] 7
gunslinger, я на одном форуме случайно прочитал (там и адрес был), что есть ресурс, типо ютуба, но там выкладывают свои программы для всеобщего рассмотрения/использования/критики, и их там около 50 миллионов, и число постоянно растёт. Но ресурс англоязычный. Но вот адрес тот не запомнил.
0
управление сложностью
1687 / 1300 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
13.07.2016, 10:30 8
Может github.com ?
0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 311
13.07.2016, 13:35  [ТС] 9
Цитата Сообщение от Почтальон Посмотреть сообщение
Может github.com ?
Может и он, но это не то. ГитХаб - это ресурс, где можно размещать ИСХОДНИКИ, и, вроде бы, там же и разрабатывать, а ресурс как бы отслеживает изменения. Вобщем - муть.
Размещён должен быть exe-шник.
0
13.07.2016, 13:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2016, 13:35
Помогаю со студенческими работами здесь

Разрешение экрана от 800х600 до 1600х1200. С++ Builder 6
Вот еще один момент. Хочу в своем проекте сделать, чтобы программа подходила к любым разрешением...

Как программно поменять разрешение экрана?
как программно поменять расширение экрана!

Как узнать максимально возможное разрешение экрана?
Получаю через WMI информацию дисплея: А как это перевести в привычные "1280х1280"?

Разрешение экрана при DOS
Какое разрешение имеет экран, когда включен режим эмуляции DOS'а в полноэкранном режиме?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru