AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Erkennen, ob ein Punkt zu einem Font dazu gehört

Erkennen, ob ein Punkt zu einem Font dazu gehört

Ein Thema von BlackJack · begonnen am 7. Aug 2005 · letzter Beitrag vom 8. Aug 2005
Antwort Antwort
Seite 2 von 2     12
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#11

Re: Erkennen, ob ein Punkt zu einem Font dazu gehört

  Alt 8. Aug 2005, 00:30
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 MSDN-Library durchsuchenGetGlyphOutline ran.

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#12

Re: Erkennen, ob ein Punkt zu einem Font dazu gehört

  Alt 8. Aug 2005, 00:34
Zitat von negaH:
Zitat:
ch weiss jetzt nich genau was du mit Path meinst, aber ich denke mal nicht dass das gehen wird, da man beim "malen" ja wieder den "Bauplan" des zeichens in ein pixelbild rastert, und da hat man dann ja wieder kanten drin.
Aha. Wie wird denn dein 2D Punkt angegeben ? Als Zahlen ? Als Double Zahlen ? Ach schau an, auf grund ihrer Auflösung haben zb. Ganzzahlige Zahlen wie Integer ebenfalls "Stufen" in Schritten von +-1 drinnen. Auch Double oder jeder beliebige andere Zahlentyp hat "Stufen" bzw- eine Rasterung. Man könnte auch von Fehlern in der maximalen Auflösung reden, wie bei Bitmaps oder auch Vektorzeichnungen.
och, bei Doubles mit 300 stellen mach ich mir da nicht so die sorgen.
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 von negaH:
Es hängt also nur davon ab wie du die Fonts scaliert in einen Path umwandelst. Die daraus erzeugbare Region ist wie auch der Path eine Vektorzeichnung.

Den Vorschlag von xaromz halte ich für absolut richtig, und alles wird vom GDI API unterstützt.
könntet ihr mir dann mal ein beispiel geben, wie man so einen Path benutzt? die Hilfe spuckt da irgendwie nichts richtiges bei aus...
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#13

Re: Erkennen, ob ein Punkt zu einem Font dazu gehört

  Alt 8. Aug 2005, 00:42
Zitat von BlackJack:
könntet ihr mir dann mal ein beispiel geben, wie man so einen Path benutzt? die Hilfe spuckt da irgendwie nichts richtiges bei aus...
So in etwa:
Delphi-Quellcode:
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;
Du brauchst a) einen Canvas bzw. ein HDC und b) den entsprechenden Font in DC selektiert.

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#14

Re: Erkennen, ob ein Punkt zu einem Font dazu gehört

  Alt 8. Aug 2005, 00:44
Zitat:
och, bei Doubles mit 300 stellen mach ich mir da nicht so die sorgen.
Wie kommst du auf 300 Stellen Genauigkeit ? Suche mal in der Hilfe nach Datentypen -> Double.
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
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#15

Re: Erkennen, ob ein Punkt zu einem Font dazu gehört

  Alt 8. Aug 2005, 15:30
@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:
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;
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).

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?
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz