![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
создание Regions [D6, WinXP]
Sergey Kaminski © (2004-08-06 14:26:00)Пишу специализированный векторный редактор. Второй день бьюсь над принципиальным разрешением такой задачи.
Необходимо получить регионы (Regions, HRGN) графических объектов для проверки «попадания» в них точки функцией PtInRegion.
Для объектов Rectangle, Ellipse, Polygon задача решается просто.
Вопрос: как можно получить координаты описаного полигона (или готовый Region) для объектов «строка», выводимых на DC с заданными параметрыми. Добавлю, что строки могут выводится под углом, с нестандартным межсимвольным расстоянием т.е., не обязательно полученный регион может быть описан структорой Rect. Это может бать и «наклонный прямоугольник".
Пока придумал 2 решения задачи, оба достаточно «кривые».
Посоветуйте какие-нибудь идеи.
Спасибо за внимание.
Sergey Kaminski (2004-08-06 15:37:00) [1]wicked © (06.08.04 15:28) [5]
Спасибо за доброе участие :)
Да, видимо, никакой стандартной функции для этого дела не приспособить. Воспользуюсь запасным вариантом, который Вы описали. Я его уже начал клепать, потом решил остановиться и "помучать" форумцев ;)
-----------------------------------------------------
Меня смущает вот что. Если вы видели картинку, Windows сама успешно справляется с такой задачей, т.е. подложку цветом текущего Brush закрашивает правильно,под углом. Вот и напрашивалось подозрение, что такой расчет мог быть выведен в какой-нибудь WinAPI. Однако, видимо, пожадничали ;-)
Еще раз спасибо.
wicked (2004-08-06 15:28:00) [2]> Sergey Kaminski [4]
именно то... но глядя на картинку, передумал такое советовать... :)
последние 20 минут я усердно искал исходник, поскольку делал такое - екзешка сохранилась.... но увы...
поэтому поясняю на пальцах:
1. находим ширину-высоту строчки - w и h... получим два вектора - vx = (w, 0), vy = (0, h)
2. вертим эти два вектора на необходимый угол... точно не помню, нужно ли менять знак угла - подбирал экспериментально, поскольку не силен в математике... ;)
3. считаем заветные 4 точки:
1-я - опорная точка (pt1), откуда мы строку TextOut'ом выводили,
2-я - pt2 = pt1 + vx,
3-я - pt3 = pt2 + vy,
4-я - pt4 = pt3 - vx
4. строим регион через CreatePolygonRgn....
удач...
Sergey Kaminski (2004-08-06 14:52:00) [3]wicked © (06.08.04 14:39) [2]
Или вы предлагаете "сканировать" битмап попиксельно, вырезая "прозрачный" прозрачные пикселы из прямоугольного региона посредством CombineRegion? Или что-то другое?
Sergey Kaminski (2004-08-06 14:48:00) [4]wicked © (06.08.04 14:39) [2]
Через path как раз сейчас и делаю, выходит весьма нехорошо.
По поводу второго решения: примерная схема?
Образец того, что мне нужно получить http://www.sergeykaminski.narod.ru/TextStringImage.jpg
Картинка маленькая, можно смотреть :) Красным закрашено то, что мне нужно получить.
wicked (2004-08-06 14:39:00) [5]решение 1: читаем о path'ах... единственное замечание от меня - далеко не со всемишрифтами работает....
решение 2: пишем в битмап и переводим его в region...
Sergey Kaminski (2004-08-06 14:29:00) [6]извините,забыл тэг закрыть, видимо.