Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

штриховка замкнутых областей [D7, XP]


бульдозер ©   (2009-07-07 01:58:00) 

всем привет.
требуется заштриховать текст (замкнутые области ) , а точнее
отобразить ето на екране и занести в массив координаты всех линий штриховки . как это лучше зделать ? в каком направлении вести поиск инфы ?
P.S. ссылки приветствуются


И. Павел   (2009-07-07 10:04:00) [1]


> KilkennyCat ©



> массив координаты всех линий штриховки

Мало ли, какие там линии, может быть кривые и нужен двуменрный массив точек ;)


Григорьев Антон   (2009-07-07 10:00:00) [2]

А если нужно получить изображение буквы в виде кривых Безье, см. функцию GetGlyphOutline.


Григорьев Антон   (2009-07-07 09:57:00) [3]

Надо с помощью BeginPath/EndPath/PathToRegion создать регион по форме текста, потом выбрать его в качестве региона отсечения (SelectClipRgn), и заштриховать прямоугольник, гарантированно включающий в себя получившийся регион. Благодаря отсечению реально будут закрашено только содержимое региона, т.е. текста.

Похожий пример есть в статье http://www.delphikingdom.com/asp/viewitem.asp?catalogid=169(см. пример GDIDraw в прилагаемом к ней архиве). Там, правда, не штриховка, а заливка букв изображением из растровой картинки, но принцип очень похож, думаю, разберётесь.


KilkennyCat   (2009-07-07 09:41:00) [4]


> И. Павел (07.07.09 09:19) [5]


Теперь добавь сюда вторую часть вопроса и будешь совсем молодец. Вот только "проще" уже не будет.


И. Павел   (2009-07-07 09:19:00) [5]

Можно проще:
var bmp:TBitmap;
begin
 Bmp:=TBitmap.Create;
 Bmp.Height:=100;
 Bmp.Width:=200;
 Bmp.Canvas.Font.Size:=50;
 Bmp.Canvas.Brush.Color:=clBlack;
 Bmp.Canvas.Rectangle(0, 0, 200, 100);
 Bmp.Canvas.Brush.Style:=bsDiagCross;
 Bmp.Canvas.Brush.Color:=clWhite;
 Bmp.Canvas.Rectangle(0, 0, 200, 100);
 Form1.Canvas.Brush.Color:=clWhite;
 Form1.Canvas.Font.Size:=50;
 Form1.Canvas.Rectangle(0, 0, 300, 200);
 Form1.Canvas.TextOut(10, 10, '12345');
 Form1.Canvas.CopyMode:=CmMergePaint;
 Form1.Canvas.Draw(10, 10, Bmp);
end;


Художник   (2009-07-07 08:52:00) [6]

Хотя нет. Предыдущий мой пост больше смахивает на ересь.
Можно буквы залить уникальным цветом, затем создать массив с координатами линии нужной направлености и используя заливку букв как маску перерисовать линии куда нужно попутно запоминая точки входа и выхода из зоны "закраски", попутно сверяясь с масивом на вхождение проверямого пикселя в конкретную линию. Где-то так


Художник   (2009-07-07 08:32:00) [7]


> всем привет.требуется заштриховать текст (замкнутые области
> ) , а точнее отобразить ето на екране и занести в массив
> координаты всех линий штриховки . как это лучше зделать
> ? в каком направлении вести поиск инфы ?

Для рисования(запоминия) штриховки можно, например, использовать гибрид алгоритмов "Алгоритм Брезенхема для рисования линии" + заливка замкнутых областей (Где-то в этом подфоруме есть мой пост с кодом этого алгоритма).


KilkennyCat   (2009-07-07 02:52:00) [8]


> в каком направлении вести поиск инфы

Любая книжка по Делфи. Раздел "Графика"


Германн   (2009-07-07 02:05:00) [9]


>
> бульдозер   (07.07.09 01:58)
>
> всем привет.
> требуется заштриховать текст (замкнутые области ) , а точнее
> отобразить ето на екране и занести в массив координаты всех
> линий штриховки . как это лучше зделать ? в каком направлении
> вести поиск инфы ?

Утро вечера мудреней!
(с) Народная мудрость.


Наверх

Титульная страница Поиск, карта сайта Написать письмо