![]() |
Re: Erkennen, ob ein Punkt zu einem Font dazu gehört
Hallo,
die Eigenschaften sind genau die Kurven und Linien, mittels derer ein Zeichen gezeichnet wird. Ich kenn mich da jetzt nicht genau aus, aber vielleicht kommst Du da über ![]() Gruß xaromz |
Re: Erkennen, ob ein Punkt zu einem Font dazu gehört
Zitat:
die koordinaten sollten als Floats angegeben werden. aber ich denke es dürfte klar sein dass ich nicht kanten durch float-ungenauigkeiten meine, sondern eben die kanten die entstehen wenn man eine pixelgrafik erstellt - ich wusste ja nicht dass es sich bei Paths um Vektorgrafiken handelt. also mal ganz easy. Zitat:
|
Re: Erkennen, ob ein Punkt zu einem Font dazu gehört
Zitat:
Delphi-Quellcode:
Du brauchst a) einen Canvas bzw. ein HDC und b) den entsprechenden Font in DC selektiert.
function IsInChar(C: Char; X, Y: Integer): Boolean;
var Region: HRGN; begin BeginPath(Canvas.Handle); TextOut(Canvas.Handle, 0, 0, @C, 1); EndPath(Canvas.Handle); Region := PathToRegion(Canvas.Handle); Result := PtInRegion(Region, X, Y); DeleteObject(Region); end; Gruß xaromz |
Re: Erkennen, ob ein Punkt zu einem Font dazu gehört
Zitat:
Ein Double ist 8 Bytes groß, in 4 Bytes bekommst du ca. 9 dezimale Stellen rein, beim Double beträgt die Genauigkeit gerademal 15-16 Stellen und keine 300. Paths: Windows SDK Hilfe im Delphi öffenen und nach "Path Functions" suchen. Der Rest sollte damit erklären. Gruß Hagen |
Re: Erkennen, ob ein Punkt zu einem Font dazu gehört
@xaromz: danke für den Code, aber irgendwie bekomme ich damit auch keine runden kurven hin, sondern zu wieder pixelmäßig gerasterte. kannst ja mal selber diesen Beispielcode testen:
Delphi-Quellcode:
mich würde eher dieses GetGlyphOutline interessieren, damit kann ich mir ja die splines holen. wenn ich dann aber PtInRegion benutze, muss ich ja immer einen Canvas angeben, in den die Splines gezeichnet werden müssen, und schon habe ich wieder die gleichen kanten wie oben in dem code. bleibt mir da also nicht anderes übrig, als selber die splines zu untersuchen, oder gibt es auch Region-funtionen, die direkt mit den Splines arbeiten, ohne diese zu zeichnen? (hab da bisher nichts in der Richtung entdeckt).
function TForm1.IsInChar(C: Char; X, Y: Double): Boolean;
var Region: HRGN; begin BeginPath(Canvas.Handle); TextOut(Canvas.Handle, 0, 0, @C, 1); EndPath(Canvas.Handle); Region := PathToRegion(Canvas.Handle); Result := PtInRegion(Region, Trunc(X*Canvas.TextWidth(C)), Trunc(Y*Canvas.TextHeight(C))); DeleteObject(Region); end; procedure TForm1.Button1Click(Sender: TObject); var x, y: Integer; begin for y := 0 to ClientHeight-1 do for x := 0 to ClientWidth-1 do if IsInChar('A', x/ClientWidth, y/ClientHeight) then Canvas.Pixels[x,y] := clBlack else Canvas.Pixels[x,y] := clWhite; end; oder ginge soetwas mit den Path-functions? bei denen habe ich allerdings nirgendwo so etwas wie PtInside oder so entdecken können. @negaH: ok, 300 stellen genauigkeit hat man nicht immer, das ist klar. aber lass uns diese diskussion hier beenden, das bringt nichts. wie gesagt, mir geht es darum Float-koordianten anzugeben (wie ich sie ja auch bei Path-functions haben müsste?) edit: noch ne frage: wie kann ich eigentlich diese Path-functions dann letztendlich nutzen? so wie ich das in der Hilfe sehe ist das doch ne C++-Klasse, oder? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 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