| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
| Как именно вытащить? Хотя какая разница: всё равно никак нельзя Но ты их сам можешь вычислить:
Пробегаешь все x от x1 до x2 и получаешь y всех точек. Или не подходит? |
| Автор: 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 |
| если я правильно понял то надо выводить линию которая не выходит за пределы определённого прямоугольника. если комуто надо прога могу подкинуть. |
| Автор: Guest 24.12.2004, 23:06 |
| Please, как загнать битмапу из файла в указатель на void |
| Автор: Guest 27.12.2004, 21:39 |
| Уже не надо! |