Вопрос по компьютерной графике
-
- Уже с Приветом
- Posts: 514
- Joined: 07 Dec 2001 10:01
- Location: toronto
Re: Вопрос по компьютерной графике
Процесс (или thread) являются DPI aware или нет?
-
- Администратор
- Posts: 17199
- Joined: 03 Jan 1999 10:01
- Location: Redmond, WA
Re: Вопрос по компьютерной графике
Не помогает. Скорее всего, это конфигурация пикселов на моём мониторе или, скорее всего, причуды графического драйвера.
Привет.
-
- Уже с Приветом
- Posts: 56113
- Joined: 06 May 2001 09:01
Re: Вопрос по компьютерной графике
Ну это, наверное проверить можно?
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)
Плавали-Знаем! (C)
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Вопрос по компьютерной графике
Как хорошо, я на днях выкинул толстенный мануал по Windows графике
По теме, я бы на dpi грешил. У меня был период когда я писал графическое приложение под Windows. Все графические примитивы там были, никогда с такой проблемой не сталкивался. Но и мониторов высокого разрешения тоже тогда не было. И кстати многие старые win приложения так и работают на новых мониторах: крошечные окошечки и шрифты.
По теме, я бы на dpi грешил. У меня был период когда я писал графическое приложение под Windows. Все графические примитивы там были, никогда с такой проблемой не сталкивался. Но и мониторов высокого разрешения тоже тогда не было. И кстати многие старые win приложения так и работают на новых мониторах: крошечные окошечки и шрифты.
Not everyone believes what I believe but my beliefs do not require them to.
-
- Администратор
- Posts: 17199
- Joined: 03 Jan 1999 10:01
- Location: Redmond, WA
Re: Вопрос по компьютерной графике
Если я печатаю символы, то я задаю их ширину и высоту. Дальше True type уже сам рисует символ. Т.е. надо полагать, что имеют.
Если это достаточный ответ на Ваш вопрос. Как я говорил, графикой никогда не занимался. Более того, я даже Windows программы писал только при работе на MS. С тех пор все майкрософтизмы постарался забыть напрочь. В некоторых средах это вызывает саркастическую улыбку.
Привет.
-
- Администратор
- Posts: 17199
- Joined: 03 Jan 1999 10:01
- Location: Redmond, WA
Re: Вопрос по компьютерной графике
Загнал Ваш код один в один в свою программулину, признаться, не совсем понимая что делаю. Поставил два останова после GetClientRect и после ClientToScreen.VladDod wrote: ↑29 Mar 2019 22:04Ну это, наверное проверить можно?
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; }
после первого:
w = 2390
h = 1312
После второго, увы, ничего не изменилось.
Монитор у меня 4K, очевидно. Окно не на полный размер монитора.
Привет.
-
- Администратор
- Posts: 17199
- Joined: 03 Jan 1999 10:01
- Location: Redmond, WA
Re: Вопрос по компьютерной графике
Ну, шрифты я могу задавать любого размера, но мой ответ выше про DPI, похоже оказался не в теме, но я не совсем понимаю, что он может изменить. Ведь линии я могу рисовать любой толщины, как, впрочем, могу рисовать отдельные пиксели, но, на всякий случай скажите как менять (попытаюсь спросить у гугла).Flash-04 wrote: ↑30 Mar 2019 14:48 Как хорошо, я на днях выкинул толстенный мануал по Windows графике
По теме, я бы на dpi грешил. У меня был период когда я писал графическое приложение под Windows. Все графические примитивы там были, никогда с такой проблемой не сталкивался. Но и мониторов высокого разрешения тоже тогда не было. И кстати многие старые win приложения так и работают на новых мониторах: крошечные окошечки и шрифты.
Чтобы не быть голословным я приаттачил, мой графический код (Прикол. Всё-таки 1-е апреля на дворе. исправитель очепяток не знал слова "приаттачил" и предложил заменить его на исконное русское слово "присобачил". Я вежливо отказался). Это не секрет и некоммерческая работа. Если кому пригодится, буду рад. Тем более, буду рад дельным советам.
Там же есть и примерный код его использования с комментариями, но там и так, надеюсь всё примитивно. Написано на коленке, чтобы быстро выводить и манипулировать отображением спектра. Потом дописывались функции по просьбе пользователей и собственному наитию.
Что он делает:
1. Программа останавливается перед отображением, чтобы можно было раздвинуть окно или сразу выйти, если смотреть на это нет сил.
2. Программа может просматривать в одном запуске любое разумное число графиков (на сколько хватит памяти и терпения их листать), переключая их одной кнопкой +/-. Масштабирование по монитору происходит каждый раз при смене графика.
3. Автоматически масштабирует изображение под открытое окно так, чтобы каждому значению можно выделить, как минимум, одну линию и вместить значения по высоте (высота предполагается как 1/2 от ширины - это даёт нормально воспринимаемые пропорции).
4. изображение можно двигать вправо/влево на половину отображаемого окна. Правее названия названия отображаются границы с какого по какой элемент нарисован график. Деления на осях не прорисовываются. Каюсь, недоработка, но по времени было не до "кистей".
5. Масштаб изображения можно увеличивать до 32 раз. Т.е. расстояния между отдельными линиями/точками увеличиваются/уменьшаются каждый раз в 2 раза. Изменение размера происходит от центра, если это возможно. Т.е. не приводит к нарушению границ при уменьшении масштаба. Масштаб меняется одновременно для всех графиков. Т.е. все другие графики будут отображены в том же масштабе, даже если они имеют другую длину.
6. Можно менять режим отображения - линиями или огибающей. Режим запоминается индивидуально для каждого графика.
7. Перед отображением все данные о сигнале помещаются в класс, в который помещаются сами данный и режимы отображения: длина данных, являются ли данные только положительными (в принципе, наверное, можно было определять автоматом), рисовать ли ось ординат (никогда не понимал откуда взялось эти дурацкие названия, в которых многие путаются), отображать ли график первоначально линиями (можно менять во время отображения на огибающую или наоборот) и, наконец, отображаемое в верхнем левом углу имя.
Подпрограмме передаётся массив структур.
P.S.
1. Если случайно изображение сдвинуть мышой или изменить размер консоли, то изображения частично затрётся или вообще исчезнет. Нажатие на любую кнопку перерисует график. Это прикол отображения графики в консоли.
2. Другой, более значимый недостаток - требуется окно делать на треть больше. Вообще, изображение точек, которые превышают w и h, но не выходят за пределы реального видимого окна рисуются без выдачи ошибки. Можно было бы этот фактор использовать, но я боюсь, что такое соотношение справедливо не для всех мониторов или настроек.
3. Подпрограмма chart(...) не дописано. Начал писать и отвлёкся. Так пока и осталось. Это всё "кисти".
You do not have the required permissions to view the files attached to this post.
Привет.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Вопрос по компьютерной графике
дык понятно что исчезнет, оно видимо вызывает invalidate и перерисовку окна консоли. В "нормальном" GDI графическом приложении обработчик события invalidate должен произвести перерисовку изображения в указанном прямоугольнике.
А можно спросить - нафига в консоли? я понимаю что Win система это позволяет, но оно как бы не предполагалось в таком контексте.
А можно спросить - нафига в консоли? я понимаю что Win система это позволяет, но оно как бы не предполагалось в таком контексте.
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Вопрос по компьютерной графике
BTW, любите WinRAR? Срочно обновляйтесь!
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 514
- Joined: 07 Dec 2001 10:01
- Location: toronto
Re: Вопрос по компьютерной графике
Privet wrote: ↑01 Apr 2019 19:25Если я печатаю символы, то я задаю их ширину и высоту. Дальше True type уже сам рисует символ. Т.е. надо полагать, что имеют.
Если это достаточный ответ на Ваш вопрос. Как я говорил, графикой никогда не занимался. Более того, я даже Windows программы писал только при работе на MS. С тех пор все майкрософтизмы постарался забыть напрочь. В некоторых средах это вызывает саркастическую улыбку.
Штука в том, что размеры фонтов даются в одних единицах измерения, а всяческие функции типа GetWindowRect и прочие возвращают данные в других единицах.
С тех пор, как в Windows добавили автоматический scaling, для поддержание "нормального" разрешения где-то на уровне 96dpi, это стало проблемой для всех.
В большинстве случаев (т.е. если процесс/thread не является dpi aware), OS будет потихонечку всё масштабировать, если требуется. Если же процесс dpi aware, то все функции будут оперировать в единицах screen pixel, без всяких там дополнительных преобразований.
Отсюда может быть и это самое magic number, на которое надо умножать, чтобы покрыть всё клиентское окно, а не его часть. Можон поставить эксперимент и запустить эту программу на десктопе и на лаптопе с экраном, у котогого "натуральный" dpi сильно отличается от 96.
-
- Уже с Приветом
- Posts: 56113
- Joined: 06 May 2001 09:01
Re: Вопрос по компьютерной графике
По идее должно быть сразу видно. Вот эта функция только часть окна заполняет? Или все окно перерисовывает? (я цвет на синий заменил для наглядности)
Подробности и пример кода вот здесь: http://qaru.site/questions/1633766/setp ... windows-10
Docs: https://msdn.microsoft.com/ru-ru/C94883 ... D9B869A5E2
Флеш, rar прекрасно видят практически все нынешние архиваторы.
Code: Select all
SetProcessDPIAware();
//
if (!GetClientRect (hWnd, &rc))
FillRect (hDC, &rc, (HBRUSH)CreateSolidBrush (RGB (0, 0, 150))); // Clear console
Docs: https://msdn.microsoft.com/ru-ru/C94883 ... D9B869A5E2
Флеш, rar прекрасно видят практически все нынешние архиваторы.
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
Плавали-Знаем! (C)
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Вопрос по компьютерной графике
Влад, я ведь не про это
А про то что кто не обновил свой WINRAR, рискует получить очень плохую бяку. И не говорите потом, что я не предупреждал.
Кстати, Ubuntu из коробки не любит эти архивы. Вроде содержимое видит, но распаковывать не хочет.
А про то что кто не обновил свой WINRAR, рискует получить очень плохую бяку. И не говорите потом, что я не предупреждал.
Кстати, Ubuntu из коробки не любит эти архивы. Вроде содержимое видит, но распаковывать не хочет.
Not everyone believes what I believe but my beliefs do not require them to.
-
- Администратор
- Posts: 17199
- Joined: 03 Jan 1999 10:01
- Location: Redmond, WA
Re: Вопрос по компьютерной графике
Добавил SetProcessDPIAware() - всё встало на свои места. Сменились значения w и h (стали больше) и рисует теперь на всю площадь консоли. Масштаб самой картинки остался прежним.VladDod wrote: ↑03 Apr 2019 01:42 По идее должно быть сразу видно. Вот эта функция только часть окна заполняет? Или все окно перерисовывает? (я цвет на синий заменил для наглядности)
Подробности и пример кода вот здесь: http://qaru.site/questions/1633766/setp ... windows-10Code: Select all
SetProcessDPIAware(); // if (!GetClientRect (hWnd, &rc)) FillRect (hDC, &rc, (HBRUSH)CreateSolidBrush (RGB (0, 0, 150))); // Clear console
Docs: https://msdn.microsoft.com/ru-ru/C94883 ... D9B869A5E2
Флеш, rar прекрасно видят практически все нынешние архиваторы.
Спасибо большое Flash-04 за идею, VladDod за код и tau за объяснение!
P.S. А что за бяка с WinRAR?
Привет.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Вопрос по компьютерной графике
https://threatpost.com/winrar-flaw-500- ... rs/142080/
другими словами, легко делается RAR архив который при открытии WinRAR тихо в фоне помещает приложение из него в Startup фолдер. При следующем перезапуске OS произойдет старт этого приложения.
другими словами, легко делается RAR архив который при открытии WinRAR тихо в фоне помещает приложение из него в Startup фолдер. При следующем перезапуске OS произойдет старт этого приложения.
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 56113
- Joined: 06 May 2001 09:01
Re: Вопрос по компьютерной графике
Спасибо tau. Я подозревал, но не был уверен, куда копать. Ну правда ... лет 15 уже ничего для виндузов не лепил.
Отметьте, только что с 10 версии ... там тоже перемены.
Я не знаю, нашел на сервере какой то 7zip ... распаковался на лаптопе с 10-кой. Какие могут возникнуть проблемы?
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
Плавали-Знаем! (C)
-
- Уже с Приветом
- Posts: 56113
- Joined: 06 May 2001 09:01
Re: Вопрос по компьютерной графике
юзер зрением не обладает?
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
Плавали-Знаем! (C)
-
- Уже с Приветом
- Posts: 2603
- Joined: 19 Jun 2003 20:22
- Location: USA
Re: Вопрос по компьютерной графике
WinRAR любим. Но пользуемся 7zip - т.к. русский и бесплатный. Ну а эйсархивов не видал в жизни очень давно. Там ведь ошибка в эйсанпакере?
По топику - я думал там какой-то Питон для Виндов. А это Си простое? Надо брать какой-нить готовый хороший фреймуорк, раз виндошные примитивы не работают.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Вопрос по компьютерной графике
Многие нет. Тем более к тому моменту, апликуха уже записалась.
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Вопрос по компьютерной графике
пока что наблюдается проблема у VladDod с пониманием прочитанного.
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 56113
- Joined: 06 May 2001 09:01
Re: Вопрос по компьютерной графике
ну если у тебя из под любого юзера позволено ... писать в стартап фолдер, ... то пардон, ты сам сабе буратино. Только не надо всех за идиотов держать.
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
Плавали-Знаем! (C)
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Вопрос по компьютерной графике
там вообще то их два. и один из них локальный для пользователя.
особенно мне нравится пассаж про "идиотов" чтоб ты знал, периодически ловятся на простые вещи даже очень опытные люди. тут как говорится "от сумы и тюрьмы"
Кстати, подобное пренебрежение "да чем такого, все очень просто настраивается" нередко выходит боком. Жизнь, она богаче любой фантазии
особенно мне нравится пассаж про "идиотов" чтоб ты знал, периодически ловятся на простые вещи даже очень опытные люди. тут как говорится "от сумы и тюрьмы"
Кстати, подобное пренебрежение "да чем такого, все очень просто настраивается" нередко выходит боком. Жизнь, она богаче любой фантазии
Not everyone believes what I believe but my beliefs do not require them to.