|
#1
|
|||
|
|||
path в GDI+ ...
Уважаемые посетители форума. Прошу совета в решении задачки...
Суть состоит в том, что надо нарисовать текст с обводкой букв. Обводку букв можно нарисовать с помощью : Код:
BeginPath( Canvas.Handle); DrawText(Canvas.Handle,'Test str',-1,r, DT_WORDBREAK) ; EndPath(Canvas.Handle) ; StrokePath(PaintBox1.Canvas.Handle); Но в таком случае она получается довольно корявой... А для рисования сглаженного контура было принято решение нарисовать его с помощью GDI+. Для этого я использовал GetPath: Код:
var points: PGPPoint; p_flags: PByte; begin .... points := nil; p_flags := nil; p_size:=GetPath(PaintBox1.Canvas.Handle,PPointer(nil)^,PPointer(nil)^,0); points := GetMemory(p_size * SizeOf(TPoint)); p_flags := GetMemory(p_size * SizeOf(Byte)); GetPath(Canvas.Handle,points^,p_flags^,p_size); .... end; И, судя по всему, координаты пути вытягиваются так как если для теста сделать Код:
for i := 0 to p_size - 1 do begin Canvas.MoveTo(points^.x, points^.y); Memo1.Lines.Add( Format('(%d;%d) |%d', [points^.x, points^.y,p_flags^]) ); Inc(points); Inc(p_flags); Canvas.LineTo(points^.x, points^.y); end; то на форме рисуется текст (хоть и с лишними линиями между точками). Вопрос, собственно, в том как этот путь передать в GDI+. Пробовал так: Код:
// g: TGPGraphics; // path: TGPGraphicsPath; // pen: TGPPen; path:=TGPGraphicsPath.Create(points,p_flags,p_size); g:=TGPGraphics.Create(PaintBox1.Canvas.Handle); pen:=TGPPen.Create(ColorRefToARGB($0083182E), 2); g.SetSmoothingMode(2); g.DrawPath(pen, path); но на канву ничего не выводится. И метод path.GetPathPoints(points,p_size) возвращает 0... В то же время если сделать так: Код:
path.AddPolygon(points,p_size) ; то на канву выводится текст, но вместе с лишними линиями (от точки к точке между буквами). Знаю что можно рисовать контур букв средствами самого GDI+ ( path.addString(...) ), но тогда я несмогу использовать флаги форматирования текста DT_WORDBREAK, DT_END_ELLIPSIS и иже с ними. А силу некоторых причин - без них совсем никак Подскажите пожалуйста как в path GDI+ правильно добавить points и p_flags.. Среда - Delphi 7. |