Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.07 c
1-1094122824
sdan
2004-09-02 15:00
2004.09.19
BarCode


14-1093517950
BorisUK
2004-08-26 14:59
2004.09.19
Автоматическое тестирование программ


1-1094035424
Wolfram
2004-09-01 14:43
2004.09.19
int в минуты?


8-1087988020
PenguinX
2004-06-23 14:53
2004.09.19
TFastDIB и переворот изображения.


1-1094187578
Anhonio
2004-09-03 08:59
2004.09.19
Delphi & Scaner