Текущий архив: 2004.09.19;
Скачать: CL | DM;
Вниз
создание Regions Найти похожие ветки
← →
Sergey Kaminski © (2004-08-06 14:26) [0]Пишу специализированный векторный редактор. Второй день бьюсь над принципиальным разрешением такой задачи.
Необходимо получить регионы (Regions, HRGN) графических объектов для проверки «попадания» в них точки функцией PtInRegion.
Для объектов Rectangle, Ellipse, Polygon задача решается просто.
Вопрос: как можно получить координаты описаного полигона (или готовый Region) для объектов «строка», выводимых на DC с заданными параметрыми. Добавлю, что строки могут выводится под углом, с нестандартным межсимвольным расстоянием т.е., не обязательно полученный регион может быть описан структорой Rect. Это может бать и «наклонный прямоугольник".
Пока придумал 2 решения задачи, оба достаточно «кривые».
Посоветуйте какие-нибудь идеи.
Спасибо за внимание.
← →
Sergey Kaminski © (2004-08-06 14:29) [1]извините,забыл тэг закрыть, видимо.
← →
wicked © (2004-08-06 14:39) [2]решение 1: читаем о path"ах... единственное замечание от меня - далеко не со всеми шрифтами работает....
решение 2: пишем в битмап и переводим его в region...
← →
Sergey Kaminski © (2004-08-06 14:48) [3]wicked © (06.08.04 14:39) [2]
Через path как раз сейчас и делаю, выходит весьма нехорошо.
По поводу второго решения: примерная схема?
Образец того, что мне нужно получить http://www.sergeykaminski.narod.ru/TextStringImage.jpg
Картинка маленькая, можно смотреть :) Красным закрашено то, что мне нужно получить.
← →
Sergey Kaminski © (2004-08-06 14:52) [4]wicked © (06.08.04 14:39) [2]
Или вы предлагаете "сканировать" битмап попиксельно, вырезая "прозрачный" прозрачные пикселы из прямоугольного региона посредством CombineRegion? Или что-то другое?
← →
wicked © (2004-08-06 15:28) [5]> 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 15:37) [6]wicked © (06.08.04 15:28) [5]
Спасибо за доброе участие :)
Да, видимо, никакой стандартной функции для этого дела не приспособить. Воспользуюсь запасным вариантом, который Вы описали. Я его уже начал клепать, потом решил остановиться и "помучать" форумцев ;)
-----------------------------------------------------
Меня смущает вот что. Если вы видели картинку, Windows сама успешно справляется с такой задачей, т.е. подложку цветом текущего Brush закрашивает правильно,под углом. Вот и напрашивалось подозрение, что такой расчет мог быть выведен в какой-нибудь WinAPI. Однако, видимо, пожадничали ;-)
Еще раз спасибо.
Страницы: 1 вся ветка
Текущий архив: 2004.09.19;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.061 c