Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.12;
Скачать: CL | DM;

Вниз

Получить начало координат при выводе в svg формат   Найти похожие ветки 

 
Gydvin ©   (2007-07-17 12:15) [0]

Здравствуйте. Делаю вывод графики в svg формат, возникла проблема с выводом текста. Как известно в делфях начало координат в текстовом блоке начинается в левом верхнем углу (Рис.1) в svg же начинаются в левом нижнем, но не углу а от линии на которой лежит буква, без учета "хвостов" у символов. Как на (Рис. 2). Если верхнюю границу понятно, как получить, то нижнюю не совсем.

http://gydvin6.narod.ru/123.jpg
5 кб


 
Dib@zol ©   (2007-07-17 12:19) [1]

GetGlyphOutline + CGO_METRICS, если не ошибаюсь, должно тебе выдать Bounding-Box для каждого запрошенного символа. Вуаля!
ЗЫ Если ты не это имел в виду, то конкретизируй вопрос.


 
Gydvin ©   (2007-07-17 14:13) [2]

Чет мозга нехватает заюзать GetGlyphOutline.
Вот чуть "накидал", но это мало вразумительно, и сам непонял чего сделал.

function TForm1.GetBoundingRectangle(CNV: tcanvas; Ch: char): integer;
var
Metric: TGlyphMetrics;
Mat2: TMat2;
begin
FillChar(Mat, SizeOf(Mat), 0);
Mat2.eM11.value := 1;
Mat2.eM22.value := 1;
result:=0;
result:=GetGlyphOutline(cnv.Handle,ord(ch),GGO_METRICS,Metric,0,nil,Mat2);

end;

Помогите заюзать плз


 
Dib@zol ©   (2007-07-17 14:18) [3]

Вот тупо выдранный сырец. Ща может оптимизирую чуть. ВВ - в GlyphMetrics.

function GetRawLtrData(DC, F : HGDIOBJ; L:Byte; var cx, cy:Smallint; var Ptr:Pointer):Cardinal;
var
 TF : HFONT;
 GM : GLYPHMETRICS;
 M : MAT2;
 i : Cardinal;
begin
 TF:=SelectObject(DC, F);

 FillChar(M, SIZEOF(MAT2), 0);
 M.eM11.value:=1;
 M.eM22.value:=1;

 i:=GetGlyphOutline(DC, L, GGO_NATIVE, GM, 0, nil, M);
 Ptr:=GlobalAllocPtr(GMEM_FIXED, i);
 Result:=i;
 GetGlyphOutline(DC, L, GGO_NATIVE, GM, i, Ptr, M);

 cx:=GM.gmCellIncX;
 cy:=GM.gmCellIncY;

 SelectObject(DC, TF);
end;


 
Gydvin ©   (2007-07-17 23:13) [4]

Собственно решил эту проблему, отрисовкой символа "w" (для поиска нижней границы) с нужным форматированием на битмапе, с последующим поиском первого пикселя буквы снизу-вверх, методом scanline. Точность получилась неплохая.



Страницы: 1 вся ветка

Текущий архив: 2007.08.12;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
8-1162927570
Areat
2006-11-07 22:26
2007.08.12
Помогите, кто знает!


15-1184678519
Nous Mellon_
2007-07-17 17:21
2007.08.12
Как настроить .htaccess?


11-1167313840
D[u]fa
2006-12-28 16:50
2007.08.12
Memo.Add


2-1184748455
Groza
2007-07-18 12:47
2007.08.12
Как поменять метку диска с помощью Delphi?


15-1184343965
SkySpeed
2007-07-13 20:26
2007.08.12
Объясните плиз работу 2-х ядерного процессора...