Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Графика GDI


Автор: MaxB 4.3.2004, 13:21
Помогите есле возможно. А если не возможно скажите, что не возможно. Есть контекст устройства CDC dc. В GDI есть методы MoveTo(x1,y1) и LineTo(x2,y2) они отображает линию. Если dc связан с окном, то отбразится отрезок с координатами начала (x1,y1) и конца (x2,y2). В результате выполнения методов, вычисляются все точки которые лежат на отрезке и рисуются на экране. Можно ли вытащить эти точки?

Автор: Дрон 7.3.2004, 00:26
Как именно вытащить?
Хотя какая разница: всё равно никак нельзя smile.gif

Но ты их сам можешь вычислить:
Код
y = (x - x1)/(x2 - x1)*(y2 - y1);

Пробегаешь все x от x1 до x2 и получаешь y всех точек.

Или не подходит? smile.gif

Автор: mr.DUDA 7.3.2004, 11:12
При выполнении GDI-функций все их результаты сразу же отрисовываются на контексте устройства, нигде не "задерживаясь", поэтому отследить координаты каждой линии, каждого пиксела - невозможно.

Но есть способ сделать это, используя метафайлы. Создать не простой контекст устройства, а контекст метафайла - CMetaFileDC. Им можно пользоваться так-же, как и обычным контекстом (MoveTo, LineTo etc.), но все эти операции будут происходить на уровне запоминания, что и куда было проведено, нарисовано и пр. - без фактической отрисовки. Когда весь необходимый набор операций будет закончен, можно закрыть метафайл, и:
- проиграть метафайл на любой контекст устройства, причём можно делать сколько угодно раз (т.е. метафайл - "многоразовый")
- пробежаться по метафайлу, и выцепить например все вызовы TextOut, LineTo и т.п., с помощью функции EnumMetaFile(Ex).

Автор: mr.DUDA 7.3.2004, 11:15
Цитата
В результате выполнения методов, вычисляются все точки которые лежат на отрезке и рисуются на экране. Можно ли вытащить эти точки?

З.Ы. если просто нужны все точки, нарисованные "только что", то можно поступить вот так:
1) сохранить текущий битовый массив в буфере
2) выполнить Move/LineTo
3) получить обновлённый битовый массив, и XOR-ом найти изменившиеся точки

Автор: Unregistered 7.3.2004, 15:05
MaxB, в GDI есть такая функция LineDDA, она при отрисовке линии для каждого пиксела вызывает пользовательскую callback функцию LineDDAProc, в кот. передаются в том числе и координаты пиксела. Можно, например, рисовать пиксел через один и т.п. Подробности в MSDN.

Возможно, это то, что тебе нужно.

Автор: OlegsDP 8.3.2004, 11:28
To MaxB

А для чего Вам надо знать координаты точек? Какая у Вас задача? Может быть, есть альтернативные решения?

Автор: shara 29.6.2004, 13:21
если я правильно понял то надо выводить линию которая не выходит за пределы определённого прямоугольника. если комуто надо прога могу подкинуть. cool.gif

Автор: Guest 24.12.2004, 23:06
Please, как загнать битмапу из файла в указатель на void smile smile smile

Автор: Guest 27.12.2004, 21:39
Уже не надо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)