![]() |
Zeichengröße, TrueType, Textmetric
Hallo,
für eine Anwendung soll die Zeichenhöhe einer Truetypeschrift auf 1/100 mm genau skaliert werden. Dazu soll der Anwender die Größe eines Großbuchstabens ohne Über- und Unterlänge eingeben. Für einen ersten Versuch habe ich die Textmetric Struktur angewendet und einen Skalierungsfaktor über folgende Formel errechnet: scaley=tmheight/(tmascent-tminternalleading). Vorher wurde mit Mapmode auf mm_himetric umgeschaltet sowie die API SelectObject mit einem TFontobjekt aufgerufen. Leider verwirrt mich das Ergebnis bei unterschiedlichen Text-Größen (TFont.Size). Das Verhältnis ist nich konstant - da sich der Charakter der Schrift nicht ändert müsste dieses doch so sein oder? Hat jemand Erfahrung mit solchen Problemen? DAnke im voraus. |
Re: Zeichengröße, TrueType, Textmetric
Herzlich willkommen in der Delphi-PRAXiS, knulli.
tmHeight in deiner Formel sollte wohl eher die vom Benutzer geforderte mHeight (Höhe des M) sein. Wenn sich die Verhältniszahl ändert, dann ist das sicherlich ein Faktum und uns bleibt nur die Suche nach einer Erklärung. Hast du schon untersucht, wie sich die Verhältniszahl entwickelt, wenn du statt der Maximalwerte die typographischen Angaben für Ascent (f) und Descent (g) in deiner Formel verwendest? Freundliche Grüße vom marabu |
AW: Zeichengröße, TrueType, Textmetric
Hallo,
Ich suche auch nach dem Verhältnis Höhe Großbuchstabe: Texthöhe. Leider komme ich nicht ganz dahinter, aus den Werten der Windows-Textmetric kann ich nicht auf die tatsächliche Höhe schließen. Beim einfachen Versuch ein Großbuchstaben auf ein Bitmap zu schreiben
Delphi-Quellcode:
ist das ausgegebene Zeichen 1282pxl hoch. Oberhalb 339pxl und unten 379pxl Abstand.
BM := TBitmap.Create;
try AFontname := 'Arial' BM.canvas.Font.Name := AFontname; BM.canvas.Font.Height := 2000; BM.height := 2000; BM.width := 1100; TextOut(BM.Canvas.Handle, 0, 0, 'E', 1); BM.SaveToFile('C:\' + AFontname + '.bmp'); finally BM.Free; end; Descent stimmt auch mit dem Wert aus der Textmetric überein. Ascent: 1621 Descent: 379 InternalLeading: 210 ExternalLeading: 59 Auch bei anderen Schriftarten kommen ähnliche Ergenisse zustande. Man erkennt schon einen Zusammenhang von den Leadings und der gesuchten Höhe, aber nichts genaues. Laut ![]() Zitat:
Grüße |
AW: Zeichengröße, TrueType, Textmetric
Am besten ist m.E. nach, wenn der Anwender die Schriftgröße so vorgibt, wie er es gewohnt ist, z.B. mit 14.
Beispiel:
Delphi-Quellcode:
Gruß
function GetFontHeight(FontSize, Zoom: integer): integer;
begin Result := Round(FontSize / 0.0254 * Zoom / 100); end; procedure TForm2.Button1Click(Sender: TObject); begin // MM_HIMETRIC: Each logical unit is mapped to 0.01 millimeter. // Positive x is to the right; positive y is up. SetMapMode(Canvas.Handle, MM_HIMETRIC); Canvas.Font.Height := GetFontHeight(14, 50); Canvas.TextOut(1000, -1000, 'Tach'); end; Thomas |
AW: Zeichengröße, TrueType, Textmetric
bekomme die Texthöhe aber so vorgegeben, brauche das Verhältnis um auf die 'richtige' Fonthöhe zu rechnen und auch anders rum.
|
AW: Zeichengröße, TrueType, Textmetric
Wenn ich mich nicht irre, ist FontSIZE immer auf den Bildschirm bezogen, die printers rechnet die intern um. Du kannst aber auch selbst von MM auf Pixel umrechnen:
Delphi-Quellcode:
function GetScreenLogPixels: integer;
var DC: HDC; begin DC := GetDC(0); try Result := GetDeviceCaps(DC, LOGPIXELSY); finally ReleaseDC(0, DC); end; end; function GetPrinterLogPixels: integer; // nach BeginDoc begin Result := GetDeviceCaps(Printer.Handle, LOGPIXELSY); end; |
AW: Zeichengröße, TrueType, Textmetric
danke, aber das ist nich das, wonach ich suche, evtl. hast du in Post #3 "tatsächliche Höhe" falsch aufgefasst, oder ich habs schlecht formuliert.
Ich möchte z.Bsp. in der Schriftart Arial ein 'A' mit TextOut ausgeben, das selbst 100pxl hoch ist. Dazu brauche ich vorher das Verhältnis Großbuchstabe : Fontsize. wie im Beispiel oben 1282:2000 = 0,641. Mit Fontsize 156 sollte dann das Zeichen mit 100pxl Höhe gezeichnet werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz