TGlyph Offset

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Firstdeathmaker

Betreff: TGlyph Offset

BeitragMi, Feb 27, 2008 12:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie bekomme ich das Offset der in TImageFont gespeicherten Glyphen? Wenn ich auf die Images direkt zugreife, werden diese chaotisch dargestellt:
user posted image

Also wie müsste das Offsethandling einer eigenen DrawText Funktion aussehen welche direkt mit den Glyphenimages arbeitet? Ich werde aus dem BMax code von Mark leider nicht wirklich schlau, weil diese für das eigentliche zeichnen in frame.Draw wechselt wo man nicht mehr weiter kommt:
(Was ich gerne wüsste ist, wofür ix,iy,jx und jy stehen. Das komische ist ja auch, dass für die x position auch ein y Anteil benutzt wird:
Code: [AUSKLAPPEN]
   Local tx#=glyph._x*ix+glyph._y*iy


Code: [AUSKLAPPEN]
   Method Draw( text$,x#,y#,ix#,iy#,jx#,jy# )

      For Local i=0 Until text.length
      
         Local n=CharToGlyph( text[i] )
         If n<0 Continue
         
         Local glyph:TImageGlyph=LoadGlyph(n)
         Local image:TImage=glyph._image
         
         If image
            Local frame:TImageFrame=image.Frame(0)
            If frame
               Local tx#=glyph._x*ix+glyph._y*iy
               Local ty#=glyph._x*jx+glyph._y*jy         
               frame.Draw 0,0,image.width,image.height,x+tx,y+ty
            EndIf
         EndIf
         
         x:+glyph._advance*ix
         y:+glyph._advance*jx
      Next
      
   End Method
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

d-bug

BeitragMi, Feb 27, 2008 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich mich richtig entsinne, dann werden die Abstände zwischen den einzelnen Glyphs direkt rechts an die Pixmap angehängt. Für diese Aussage übernehme ich aber keine Gewähr. Die Methode Draw() hat damit gar nichts zu tun. ix#,iy#,jx#jy# sind irgendwelche Faktoren, die Mark da bei SetScale, SetRotation verwendet. Schau mal in die Funktion DrawText, da werden die gefüllt.

Um das zu erreichen, was du willst, musst du dir einen neuen FontLoader, Eine neue TGlyph-Klasse stricken. Wie das geht kannst du dir ja in meinem BMPFont Modul ansehen, dass macht da nichts anderes. Da hab ich ebenfalls einen neuen Loader geschrieben, der die BMPFonts in eine eigen TGlyph-Klasse pfuscht. Das eigentliche Verwalten und Zeichnen übernimmt dann wieder TImageFont!

cheers
 

ChristianK

BeitragMi, Feb 27, 2008 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt verschiedene Arten von Offsets. Der Advance-Offset gibt an, wie weit der "Cursor" nach dem Zeichnen des Buchstabens nach rechts bewegt werden muss. Der Bearing-Offset ( x und y ) gibt die Verschiebung eines einzelnen Glyphs von der Grundlinie an.

Vielleicht hilft dir auch diese Abbildung weiter:
user posted image

Oder die FreeType Docs -> http://www.freetype.org/freety...step2.html
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Firstdeathmaker

BeitragMi, Feb 27, 2008 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meinte nicht die Abstände zwischen den einzelnen Gryph´s, sondern das Offset der einzelnen Images.

Wie ich jetzt herausgefunden habe, ist dieses unter

g:TImageGlyph

g._x und g._y zu finden.

Der Abstand ist unter
g._advance zu finden.

Aber danke für deinen Rat (und vor allem für BMPFont, ich benutz es in jedem meiner Projekte!)
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group