Главная страница
    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.45 MB
Время: 0.044 c
2-1183970865
Newser
2007-07-09 12:47
2007.08.12
тип поля - Дата/время


1-1180693990
webpauk
2007-06-01 14:33
2007.08.12
Преобразование строки


15-1184486603
TStas
2007-07-15 12:03
2007.08.12
Test


2-1184826661
pathfinder
2007-07-19 10:31
2007.08.12
Сообщение компилятора Delphi 2006..


2-1183456368
azamatufa
2007-07-03 13:52
2007.08.12
ADO, Ehlib. Коллеги, подскажите, пожалуйста!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский