Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
2-1184832133
Combo
2007-07-19 12:02
2007.08.12
Как изменить пароль на Access?


15-1184238783
Megabyte
2007-07-12 15:13
2007.08.12
Правила формирования xml-файлов


15-1184573704
Vlad Oshin
2007-07-16 12:15
2007.08.12
что за кодировка? какаято стандартная или вычурная?


15-1184301344
(AD)acid
2007-07-13 08:35
2007.08.12
Выбор коммуникатора


15-1184656512
VID
2007-07-17 11:15
2007.08.12
Кто из Питера? Вопрос о съеме квартиры




   Наверх