Страница 2 из 4

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

Добавлено: Вс мар 24, 2019 9:57 pm
Privet
VladDod писал(а): Вс мар 24, 2019 7:17 am
Privet писал(а): Сб мар 23, 2019 11:14 pm Единственная непонятка - треть окна не используется, что не критично.
А как дескрипторы получали?

Код: Выделить всё

    hwnd=GetConsoleWindow();
    hdc=GetDC(hwnd);
Да, именно так

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

Добавлено: Вс мар 24, 2019 10:18 pm
Privet
VladDod писал(а): Вс мар 24, 2019 7:26 am
Privet писал(а): Сб мар 23, 2019 11:14 pm Консоль - то же самое окно. Большой разницы нет.
Я - про то же. И это окно имеет свой, (недоступный вам) обработчик событий. Который будет сводить ваши усилия на нет, от любого свистка системы на перерисовку какой либо части собственного окна.
Это проявляется только в том, что любое действие с этим окном приводит к его перерисовке и исчезновению картинки, но у меня вывод заведён в цикл, который упирается в getch(). Нажатием нужной клавиши я или перерисовываю картинку, меняю режимы или вообще выхожу. Т.е. стандартный подход. По функциональности нас всё полностью устраивает. Единственная некорректность - окно приходится делать на треть больше, чем это реально требуется.
В принципе, я могу легко скорректировать это программно, умножив полученные ширину и высоту окна на 1.5, но я опасаюсь делать чего-то, чего не понимаю. Тогда координаты некоторых точек численно будут за пределами окна. Они рисуются, но мало ли какие сюрпризы могут быть с другим монитором или драйвером. Поэтому, оставил как есть, т.к. качественно для нас это ничего не меняет. Как-то использовать эту лишнюю треть я всё равно не смогу.

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

Добавлено: Вс мар 24, 2019 10:40 pm
VladDod
Privet писал(а): Вс мар 24, 2019 10:18 pm ... за пределами окна. Они рисуются, ...
Рисуются за пределами окна "консоли"? Может дескрипторы указывают не на само "окно консоли", а на нечто, созданное системой для запущенного приложения, но не видимого, поскольку не было вызовов визуализации? Я каюсь. в виндовз играться ... уже лет много ... как перестал, но чисто по логике такое возможно?

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

Добавлено: Вс мар 24, 2019 10:46 pm
Privet
Вообще, двух мнений на предмет как правильно делать графику, быть не может. У меня лишь конкретный частный случай.
Программа моделирует некий процесс и выводит на печать и в файл результаты. Запускается многократно через bat-файлы с заданными в командной строке параметрами. Прорисовка данных делается только для контроля только в некоторых случаях. На мне висит много работы по расширению модели. Поэтому, тратить время на причёсывание второстепенных функций смысла нет.

В своей среде мы часто вспоминаем поговорку, что, сначала надо сделать гроб, а потом уже кисти. :)

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

Добавлено: Пн мар 25, 2019 3:35 pm
Maw Hogben
Я понимаю что вы покончили с графикой... Но мне тут опять прислали... Пример. :)

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

Добавлено: Пн мар 25, 2019 7:27 pm
Privet
Maw Hogben писал(а): Пн мар 25, 2019 3:35 pm Я понимаю что вы покончили с графикой... Но мне тут опять прислали... Пример. :)
Спасибо большое! Сейчас посмотрю.
Программа работает, но проблема несоответствия координат осталась и её желательно решить и понять причину.

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

Добавлено: Вт мар 26, 2019 9:48 am
Privet
Я посмотрел эту программку. Код из неё буквально один в один точно повторяет мой код. Я вставил его как есть в свою программу и он также рисует картинки в первой 2/3 консоли. Чуда не произошло. Проблема остаётся. :(

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

Добавлено: Вт мар 26, 2019 12:15 pm
VladDod
Privet писал(а): Вт мар 26, 2019 9:48 am рисует картинки в первой 2/3 консоли
А если вы меняете размеры окна "консоли". ваша картинка меняет размер пропорционально? Или остается неизменной?
Privet писал(а): Вт мар 26, 2019 9:48 am Проблема остаётся. :(
Можно изобразить собственный эмулятор терминала. Вместо "консоли". Не бог весть какая сложность, но зато будет контроль над окном.

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

Добавлено: Ср мар 27, 2019 1:17 pm
Privet
VladDod писал(а): Вт мар 26, 2019 12:15 pm
Privet писал(а): Вт мар 26, 2019 9:48 am рисует картинки в первой 2/3 консоли
А если вы меняете размеры окна "консоли". ваша картинка меняет размер пропорционально? Или остается неизменной?
Любое изменение размера консоли приводит к перерисовке консоли и исчезновения всего нарисованного. При каждой перерисовке я проверяю текущие размеры консоли и масштабирую рисунок, уменьшая его каждый раз в два раза. Т.е. всё очень просто.
VladDod писал(а): Вт мар 26, 2019 12:15 pm
Privet писал(а): Вт мар 26, 2019 9:48 am Проблема остаётся. :(
Можно изобразить собственный эмулятор терминала. Вместо "консоли". Не бог весть какая сложность, но зато будет контроль над окном.
Создать своё окно? Наверное, это было бы правильно, но на сегодня нас это полностью устраивает. Что-то переделывать мне просто некогда.

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

Добавлено: Ср мар 27, 2019 3:30 pm
VladDod
Privet писал(а): Ср мар 27, 2019 1:17 pm При каждой перерисовке я проверяю текущие размеры консоли и масштабирую рисунок, уменьшая его каждый раз в два раза.
Я это и имел ввиду. То есть вариантов не много ... Получается, что GetClientRect(); вас обманывает. Поскольку это библиотечная функция, в которую вы скармливаете адрес структуры для заполнения результатом, ... можно предположить несоответствие переданной структуры, тому, что уже скомпилировано в библиотеке. Я бы тщательно проверил описание этой структуры и ее зависимость от компилятора. Точнее от разрядности компилятора. Может попробовать перекомпилиться с 64 на 32 бита (или наоборот)

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

Добавлено: Ср мар 27, 2019 5:21 pm
tau
Процесс (или thread) являются DPI aware или нет?

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

Добавлено: Пт мар 29, 2019 3:17 pm
Privet
VladDod писал(а): Ср мар 27, 2019 3:30 pm
Privet писал(а): Ср мар 27, 2019 1:17 pm При каждой перерисовке я проверяю текущие размеры консоли и масштабирую рисунок, уменьшая его каждый раз в два раза.
... Может попробовать перекомпилиться с 64 на 32 бита (или наоборот)
Не помогает. Скорее всего, это конфигурация пикселов на моём мониторе или, скорее всего, причуды графического драйвера.

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

Добавлено: Пт мар 29, 2019 5:04 pm
VladDod
Privet писал(а): Пт мар 29, 2019 3:17 pm ... скорее всего, причуды графического драйвера.
Ну это, наверное проверить можно?

Код: Выделить всё

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;
}

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

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

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

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

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