Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Sep 19, 2018 11:31

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Mär 24, 2018 10:38 
Offline
DGL Member

Registriert: Di Aug 31, 2010 10:29
Beiträge: 8
Wohnort: Norwegen
Programmiersprache: Pascal
Der Project ist 2D und glOrtho und eine Kurve mit Achsen wird gezeichnet. Mir fehlt nur die "Annotation" der Achsen. Ich kenne schon jeden Zahl.

Ich schrieb niemals Buchstaben oder Ziffern in OpenGL. Mein font soll nicht-proportional sein; bzw. "Lucida Console". Ich glaube mein Problem ist nicht mehr da, wenn ich die Grösse der Buchstaben kenne, dass heist sowohl nHeight als nWidth.

Die Frage: wie finde ich nWidth wenn ich CreateFont brauche als unten gegeben ist?

MhG,
ChG


Code:
  1.  
  2.        tnrFont : HFont;
  3.        ...
  4.        WC:=StringToWideChar('Lucida Console',wideChars,14+1);
  5.        tnrFont := CreateFont(
  6.          20,                 // nHeight,
  7.          0,                  // nWidth,
  8.          0,                  // nEscapement,
  9.          0,                  // nOrientation,
  10.          FW_NORMAL,          // fnWeight,
  11.          0,                  // fdwItalic,
  12.          0,                  // fdwUnderline,
  13.          0,                  // fdwStrikeOut,
  14.          ANSI_CHARSET,       // fdwCharSet,
  15.          OUT_TT_PRECIS,      // fdwOutputPrecision,
  16.          CLIP_DEFAULT_PRECIS,// fdwClipPrecision,
  17.          DRAFT_QUALITY,      // fdwQuality,
  18.          DEFAULT_PITCH,      // fdwPitchAndFamily,
  19.          WC);  // p.351 Nutshell
  20.  
  21.  


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Mär 25, 2018 07:50 
Offline
DGL Member

Registriert: Di Aug 31, 2010 10:29
Beiträge: 8
Wohnort: Norwegen
Programmiersprache: Pascal
Nach suche auf der WWW fand ich endlich GetCharWidth32 und die Antwort auf meine Frage in einer Diskussion hier: http://www.delphigroups.info/2/1b/202000.html.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 28, 2018 14:47 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2523
Wohnort: Berlin
Programmiersprache: C/C++, C#
I guess german isn't your native language and because of that I will write the answer in english.
GetCharWidth isn't avaiable anymore and isn't necessary either because it would work only on Monofonts because the spaces between character could be different.
E.g. an i followed by ] could have a different space between the character as i followed by c.
You set the font-height you want to render with and windows will try to find the glyph set which suites your requirements best.
The rasterizer will also do some subpixel corrections depending on your resolution and the angle of the font.
If you use OpenGL to render your fonts you shouldn't use the fonts as-is if you change the size and angle of the text.
The reason is that the rasterizer use font-hinting to render the outline smooth but if you change the size or orientation of each glyph it's no longer correct and will look bad.
In OpenGL the most common technique for rendering font with a smooth outline will be "distance fields font rendering" and "Multi-channel signed distance field font rendering".
msdfgen tool
font atlas tool
Both tools generate the layouting information for each glyph(size, origin offset and advance).
If you want to get the data from windows API you can look at GetGlyphOutline.
Example from my codebase
Enumerate text and get the total width by summing up the spaces and offsets

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Apr 20, 2018 15:44 
Offline
DGL Member

Registriert: Di Aug 31, 2010 10:29
Beiträge: 8
Wohnort: Norwegen
Programmiersprache: Pascal
Vielen Dank für deine Antwort. Du hast völlig recht, Deutsch ist nicht meine Sprache. Trotzdem versuche ich nocheinmal
auf Deutsch.

Erstens: deine Antwort handelt sich um proportional Schrift. Meine Frage handelt sich um nicht-proportional Schrift; auf Englisch als "monospaced" bekannt, was du auch schreibst. (Siehe unten) Du hast also "pearls for the swine" bedient.

Zweitens: Die Funktion GetCharWidth32 ist doch da. Ich brauche sie jetzt täglich erfolgreich in Verbindung mit der "Lucida Console".

Deine Antwort wird mir in doch der Zukunft nützlich sein, wenn ich griechische Buchstaben schreiben werde (z.B. \mu; LaTeX, CM).

Am Ende eine Einzelheit: Auf Englisch meine ich die Anfangsbuchstabe von einer Sprachname mit einer Versalie geschrieben wird.


Für uns in der Schriftgiesserei unbevanderten fand ich in der WWW irgendwo eine gute Definition:

"A monospaced font, also called a fixed-pitch, fixed-width, or non-proportional font, is a font whose letters and characters each occupy the same amount of horizontal space. This contrasts with variable-width fonts, where the letters and spacings have different widths."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.014s | 16 Queries | GZIP : On ]