Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Графика GDI 
:(
    Опции темы
MaxB
Дата 4.3.2004, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.2.2004
Где: Украина, Одесса

Репутация: нет
Всего: 1



Помогите есле возможно. А если не возможно скажите, что не возможно. Есть контекст устройства CDC dc. В GDI есть методы MoveTo(x1,y1) и LineTo(x2,y2) они отображает линию. Если dc связан с окном, то отбразится отрезок с координатами начала (x1,y1) и конца (x2,y2). В результате выполнения методов, вычисляются все точки которые лежат на отрезке и рисуются на экране. Можно ли вытащить эти точки?
PM MAIL WWW ICQ   Вверх
Дрон
Дата 7.3.2004, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



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

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

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

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

Это сообщение отредактировал(а) Дрон - 7.3.2004, 00:27


--------------------
Да. Именно так.
PM   Вверх
mr.DUDA
Дата 7.3.2004, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



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

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


--------------------
user posted image
PM MAIL WWW   Вверх
mr.DUDA
Дата 7.3.2004, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



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

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


--------------------
user posted image
PM MAIL WWW   Вверх
Unregistered
Дата 7.3.2004, 15:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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

Возможно, это то, что тебе нужно.
  Вверх
OlegsDP
Дата 8.3.2004, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 25.2.2004

Репутация: нет
Всего: 1



To MaxB

А для чего Вам надо знать координаты точек? Какая у Вас задача? Может быть, есть альтернативные решения?
PM MAIL   Вверх
shara
Дата 29.6.2004, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2



если я правильно понял то надо выводить линию которая не выходит за пределы определённого прямоугольника. если комуто надо прога могу подкинуть. cool.gif


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
Guest
Дата 24.12.2004, 23:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Please, как загнать битмапу из файла в указатель на void smile smile smile
  Вверх
Guest
Дата 27.12.2004, 21:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Уже не надо!
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0495 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.