Вопрос по компьютерной графике

tau
Уже с Приветом
Posts: 514
Joined: 07 Dec 2001 10:01
Location: toronto

Re: Вопрос по компьютерной графике

Post by tau »

Процесс (или thread) являются DPI aware или нет?
User avatar
Privet
Администратор
Posts: 17199
Joined: 03 Jan 1999 10:01
Location: Redmond, WA

Re: Вопрос по компьютерной графике

Post by Privet »

VladDod wrote: 27 Mar 2019 20:30
Privet wrote: 27 Mar 2019 18:17 При каждой перерисовке я проверяю текущие размеры консоли и масштабирую рисунок, уменьшая его каждый раз в два раза.
... Может попробовать перекомпилиться с 64 на 32 бита (или наоборот)
Не помогает. Скорее всего, это конфигурация пикселов на моём мониторе или, скорее всего, причуды графического драйвера.
Привет.
User avatar
VladDod
Уже с Приветом
Posts: 56113
Joined: 06 May 2001 09:01

Re: Вопрос по компьютерной графике

Post by VladDod »

Privet wrote: 29 Mar 2019 20:17 ... скорее всего, причуды графического драйвера.
Ну это, наверное проверить можно?

Code: Select all

GetClientRect (hWnd, &rc);
w = rc.right;
h = rc.bottom;
POINT point, zero;
zero.x=zero.y=0;
point.x = rc.right;
point.y = rc.bottom;
if( ClientToScreen(hWnd, &zero) )
if( ClientToScreen(hWnd, &point) )
{
     w = point.x-zero.x;
     h = point.y-zero.y;
}
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Вопрос по компьютерной графике

Post by Flash-04 »

Как хорошо, я на днях выкинул толстенный мануал по Windows графике 8)

По теме, я бы на dpi грешил. У меня был период когда я писал графическое приложение под Windows. Все графические примитивы там были, никогда с такой проблемой не сталкивался. Но и мониторов высокого разрешения тоже тогда не было. И кстати многие старые win приложения так и работают на новых мониторах: крошечные окошечки и шрифты.
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
Privet
Администратор
Posts: 17199
Joined: 03 Jan 1999 10:01
Location: Redmond, WA

Re: Вопрос по компьютерной графике

Post by Privet »

tau wrote: 27 Mar 2019 22:21 Процесс (или thread) являются DPI aware или нет?
Если я печатаю символы, то я задаю их ширину и высоту. Дальше True type уже сам рисует символ. Т.е. надо полагать, что имеют.
Если это достаточный ответ на Ваш вопрос. Как я говорил, графикой никогда не занимался. Более того, я даже Windows программы писал только при работе на MS. С тех пор все майкрософтизмы постарался забыть напрочь. В некоторых средах это вызывает саркастическую улыбку. :)
Привет.
User avatar
Privet
Администратор
Posts: 17199
Joined: 03 Jan 1999 10:01
Location: Redmond, WA

Re: Вопрос по компьютерной графике

Post by Privet »

VladDod wrote: 29 Mar 2019 22:04
Privet wrote: 29 Mar 2019 20:17 ... скорее всего, причуды графического драйвера.
Ну это, наверное проверить можно?

Code: Select all

GetClientRect (hWnd, &rc);
w = rc.right;
h = rc.bottom;
POINT point, zero;
zero.x=zero.y=0;
point.x = rc.right;
point.y = rc.bottom;
if( ClientToScreen(hWnd, &zero) )
  if( ClientToScreen(hWnd, &point) )
  {
     w = point.x-zero.x;
     h = point.y-zero.y;
  }
Загнал Ваш код один в один в свою программулину, признаться, не совсем понимая что делаю. Поставил два останова после GetClientRect и после ClientToScreen.
после первого:
w = 2390
h = 1312
После второго, увы, ничего не изменилось.
Монитор у меня 4K, очевидно. Окно не на полный размер монитора.
Привет.
User avatar
Privet
Администратор
Posts: 17199
Joined: 03 Jan 1999 10:01
Location: Redmond, WA

Re: Вопрос по компьютерной графике

Post by Privet »

Flash-04 wrote: 30 Mar 2019 14:48 Как хорошо, я на днях выкинул толстенный мануал по Windows графике 8)

По теме, я бы на dpi грешил. У меня был период когда я писал графическое приложение под Windows. Все графические примитивы там были, никогда с такой проблемой не сталкивался. Но и мониторов высокого разрешения тоже тогда не было. И кстати многие старые win приложения так и работают на новых мониторах: крошечные окошечки и шрифты.
Ну, шрифты я могу задавать любого размера, но мой ответ выше про DPI, похоже оказался не в теме, но я не совсем понимаю, что он может изменить. Ведь линии я могу рисовать любой толщины, как, впрочем, могу рисовать отдельные пиксели, но, на всякий случай скажите как менять (попытаюсь спросить у гугла).

Чтобы не быть голословным я приаттачил, мой графический код (Прикол. Всё-таки 1-е апреля на дворе. исправитель очепяток не знал слова "приаттачил" и предложил заменить его на исконное русское слово "присобачил". Я вежливо отказался). Это не секрет и некоммерческая работа. Если кому пригодится, буду рад. Тем более, буду рад дельным советам.

Там же есть и примерный код его использования с комментариями, но там и так, надеюсь всё примитивно. Написано на коленке, чтобы быстро выводить и манипулировать отображением спектра. Потом дописывались функции по просьбе пользователей и собственному наитию.
Что он делает:

1. Программа останавливается перед отображением, чтобы можно было раздвинуть окно или сразу выйти, если смотреть на это нет сил.
2. Программа может просматривать в одном запуске любое разумное число графиков (на сколько хватит памяти и терпения их листать), переключая их одной кнопкой +/-. Масштабирование по монитору происходит каждый раз при смене графика.
3. Автоматически масштабирует изображение под открытое окно так, чтобы каждому значению можно выделить, как минимум, одну линию и вместить значения по высоте (высота предполагается как 1/2 от ширины - это даёт нормально воспринимаемые пропорции).
4. изображение можно двигать вправо/влево на половину отображаемого окна. Правее названия названия отображаются границы с какого по какой элемент нарисован график. Деления на осях не прорисовываются. Каюсь, недоработка, но по времени было не до "кистей".
5. Масштаб изображения можно увеличивать до 32 раз. Т.е. расстояния между отдельными линиями/точками увеличиваются/уменьшаются каждый раз в 2 раза. Изменение размера происходит от центра, если это возможно. Т.е. не приводит к нарушению границ при уменьшении масштаба. Масштаб меняется одновременно для всех графиков. Т.е. все другие графики будут отображены в том же масштабе, даже если они имеют другую длину.
6. Можно менять режим отображения - линиями или огибающей. Режим запоминается индивидуально для каждого графика.
7. Перед отображением все данные о сигнале помещаются в класс, в который помещаются сами данный и режимы отображения: длина данных, являются ли данные только положительными (в принципе, наверное, можно было определять автоматом), рисовать ли ось ординат (никогда не понимал откуда взялось эти дурацкие названия, в которых многие путаются), отображать ли график первоначально линиями (можно менять во время отображения на огибающую или наоборот) и, наконец, отображаемое в верхнем левом углу имя.
Подпрограмме передаётся массив структур.

P.S.
1. Если случайно изображение сдвинуть мышой или изменить размер консоли, то изображения частично затрётся или вообще исчезнет. Нажатие на любую кнопку перерисует график. Это прикол отображения графики в консоли.
2. Другой, более значимый недостаток - требуется окно делать на треть больше. Вообще, изображение точек, которые превышают w и h, но не выходят за пределы реального видимого окна рисуются без выдачи ошибки. Можно было бы этот фактор использовать, но я боюсь, что такое соотношение справедливо не для всех мониторов или настроек.
3. Подпрограмма chart(...) не дописано. Начал писать и отвлёкся. Так пока и осталось. Это всё "кисти".
plot.rar
You do not have the required permissions to view the files attached to this post.
Привет.
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Вопрос по компьютерной графике

Post by Flash-04 »

дык понятно что исчезнет, оно видимо вызывает invalidate и перерисовку окна консоли. В "нормальном" GDI графическом приложении обработчик события invalidate должен произвести перерисовку изображения в указанном прямоугольнике.

А можно спросить - нафига в консоли? я понимаю что Win система это позволяет, но оно как бы не предполагалось в таком контексте.
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Вопрос по компьютерной графике

Post by Flash-04 »

BTW, любите WinRAR? Срочно обновляйтесь!
Not everyone believes what I believe but my beliefs do not require them to.
tau
Уже с Приветом
Posts: 514
Joined: 07 Dec 2001 10:01
Location: toronto

Re: Вопрос по компьютерной графике

Post by tau »

Privet wrote: 01 Apr 2019 19:25
tau wrote: 27 Mar 2019 22:21 Процесс (или thread) являются DPI aware или нет?
Если я печатаю символы, то я задаю их ширину и высоту. Дальше True type уже сам рисует символ. Т.е. надо полагать, что имеют.
Если это достаточный ответ на Ваш вопрос. Как я говорил, графикой никогда не занимался. Более того, я даже Windows программы писал только при работе на MS. С тех пор все майкрософтизмы постарался забыть напрочь. В некоторых средах это вызывает саркастическую улыбку. :)

Штука в том, что размеры фонтов даются в одних единицах измерения, а всяческие функции типа GetWindowRect и прочие возвращают данные в других единицах.
С тех пор, как в Windows добавили автоматический scaling, для поддержание "нормального" разрешения где-то на уровне 96dpi, это стало проблемой для всех.
В большинстве случаев (т.е. если процесс/thread не является dpi aware), OS будет потихонечку всё масштабировать, если требуется. Если же процесс dpi aware, то все функции будут оперировать в единицах screen pixel, без всяких там дополнительных преобразований.

Отсюда может быть и это самое magic number, на которое надо умножать, чтобы покрыть всё клиентское окно, а не его часть. Можон поставить эксперимент и запустить эту программу на десктопе и на лаптопе с экраном, у котогого "натуральный" dpi сильно отличается от 96.
User avatar
VladDod
Уже с Приветом
Posts: 56113
Joined: 06 May 2001 09:01

Re: Вопрос по компьютерной графике

Post by VladDod »

По идее должно быть сразу видно. Вот эта функция только часть окна заполняет? Или все окно перерисовывает? (я цвет на синий заменил для наглядности)

Code: Select all

   SetProcessDPIAware();
   //
   if (!GetClientRect (hWnd, &rc))
      FillRect (hDC, &rc, (HBRUSH)CreateSolidBrush (RGB (0, 0, 150)));    // Clear console
Подробности и пример кода вот здесь: http://qaru.site/questions/1633766/setp ... windows-10
Docs: https://msdn.microsoft.com/ru-ru/C94883 ... D9B869A5E2

Флеш, rar прекрасно видят практически все нынешние архиваторы.
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Вопрос по компьютерной графике

Post by Flash-04 »

Влад, я ведь не про это 8)
А про то что кто не обновил свой WINRAR, рискует получить очень плохую бяку. И не говорите потом, что я не предупреждал.

Кстати, Ubuntu из коробки не любит эти архивы. Вроде содержимое видит, но распаковывать не хочет.
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
Privet
Администратор
Posts: 17199
Joined: 03 Jan 1999 10:01
Location: Redmond, WA

Re: Вопрос по компьютерной графике

Post by Privet »

VladDod wrote: 03 Apr 2019 01:42 По идее должно быть сразу видно. Вот эта функция только часть окна заполняет? Или все окно перерисовывает? (я цвет на синий заменил для наглядности)

Code: Select all

   SetProcessDPIAware();
   //
   if (!GetClientRect (hWnd, &rc))
      FillRect (hDC, &rc, (HBRUSH)CreateSolidBrush (RGB (0, 0, 150)));    // Clear console
Подробности и пример кода вот здесь: http://qaru.site/questions/1633766/setp ... windows-10
Docs: https://msdn.microsoft.com/ru-ru/C94883 ... D9B869A5E2

Флеш, rar прекрасно видят практически все нынешние архиваторы.
Добавил SetProcessDPIAware() - всё встало на свои места. Сменились значения w и h (стали больше) и рисует теперь на всю площадь консоли. Масштаб самой картинки остался прежним.

Спасибо большое Flash-04 за идею, VladDod за код и tau за объяснение!

P.S. А что за бяка с WinRAR?
Привет.
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Вопрос по компьютерной графике

Post by Flash-04 »

https://threatpost.com/winrar-flaw-500- ... rs/142080/

другими словами, легко делается RAR архив который при открытии WinRAR тихо в фоне помещает приложение из него в Startup фолдер. При следующем перезапуске OS произойдет старт этого приложения.
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
VladDod
Уже с Приветом
Posts: 56113
Joined: 06 May 2001 09:01

Re: Вопрос по компьютерной графике

Post by VladDod »

Privet wrote: 03 Apr 2019 14:51 Добавил SetProcessDPIAware() - всё встало на свои места.
Спасибо tau. Я подозревал, но не был уверен, куда копать. Ну правда ... лет 15 уже ничего для виндузов не лепил. :oops:
Отметьте, только что с 10 версии ... там тоже перемены.
Flash-04 wrote: 03 Apr 2019 03:39 А про то что кто не обновил свой WINRAR ...
Я не знаю, нашел на сервере какой то 7zip ... распаковался на лаптопе с 10-кой. Какие могут возникнуть проблемы?
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
User avatar
VladDod
Уже с Приветом
Posts: 56113
Joined: 06 May 2001 09:01

Re: Вопрос по компьютерной графике

Post by VladDod »

Flash-04 wrote: 03 Apr 2019 15:33 WinRAR тихо в фоне помещает приложение из него в Startup фолдер.
юзер зрением не обладает? :%)
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
User avatar
liamkin
Уже с Приветом
Posts: 2603
Joined: 19 Jun 2003 20:22
Location: USA

Re: Вопрос по компьютерной графике

Post by liamkin »

Flash-04 wrote: 02 Apr 2019 13:32 BTW, любите WinRAR? Срочно обновляйтесь!
WinRAR любим. Но пользуемся 7zip - т.к. русский и бесплатный. Ну а эйсархивов не видал в жизни очень давно. Там ведь ошибка в эйсанпакере? :)
По топику - я думал там какой-то Питон для Виндов. А это Си простое? Надо брать какой-нить готовый хороший фреймуорк, раз виндошные примитивы не работают.
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Вопрос по компьютерной графике

Post by Flash-04 »

VladDod wrote:
Flash-04 wrote: 03 Apr 2019 15:33 WinRAR тихо в фоне помещает приложение из него в Startup фолдер.
юзер зрением не обладает? :%)
Многие нет. Тем более к тому моменту, апликуха уже записалась.
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Вопрос по компьютерной графике

Post by Flash-04 »

VladDod wrote: 03 Apr 2019 15:38 Я не знаю, нашел на сервере какой то 7zip ... распаковался на лаптопе с 10-кой. Какие могут возникнуть проблемы?
пока что наблюдается проблема у VladDod с пониманием прочитанного.
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
VladDod
Уже с Приветом
Posts: 56113
Joined: 06 May 2001 09:01

Re: Вопрос по компьютерной графике

Post by VladDod »

Flash-04 wrote: 03 Apr 2019 16:28 ... апликуха уже записалась.
ну если у тебя из под любого юзера позволено ... писать в стартап фолдер, 8O ... то пардон, ты сам сабе буратино. :pain1: Только не надо всех за идиотов держать.
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Вопрос по компьютерной графике

Post by Flash-04 »

там вообще то их два. и один из них локальный для пользователя.
особенно мне нравится пассаж про "идиотов" :D чтоб ты знал, периодически ловятся на простые вещи даже очень опытные люди. тут как говорится "от сумы и тюрьмы" :D
Кстати, подобное пренебрежение "да чем такого, все очень просто настраивается" нередко выходит боком. Жизнь, она богаче любой фантазии 8)
Not everyone believes what I believe but my beliefs do not require them to.

Return to “Вопросы и новости IT”