Lieber Besucher, herzlich willkommen bei: RPG Studio - Make your World real. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Shabraxxx

Projekt: Ressourcenbereich & Seitenredaktion

  • »Shabraxxx« ist der Autor dieses Themas

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Nachricht senden

1

Samstag, 3. Januar 2015, 23:04

Unterbinden der Kantenglättung von Schrift

Hallo Gast,

im Zuge eines Retroprojektes, an dem ich aktuell bastele, bemerkte ich, dass der XP auch Bitmap-Fonts auf ihrer Standardgröße ein Anti-Aliasing aufzwingt. Der Effekt ist zwar nicht allzu merklich, aber da ich mich in Sachen Farb(modi)restriktionen möglichst an Vorgaben halten will, wurmt es mich doch ein wenig.

Bild

Daher nun meine Frage: Ist es möglich, die Kantenglättung von Text via Script zu unterbinden?

Wenn Du etwas im Ermel [sic!] hast, oder dich gar des Scriptens erbarmst, freue ich mich dem Schnitzel ähnlich.
Je nach Aufwand revanchiere ich mich selbstverständlich adäquatest - vom feuchten Händedruck bis zum Creditseintrag ist wirklich alles möglich. ;)
Gruß, Shabz

P.S.: Anbei die verwendete Schriftart.
»Shabraxxx« hat folgende Datei angehängt:
  • alagard.zip (4,39 kB - 2 mal heruntergeladen - zuletzt: 5. Januar 2015, 06:02)
„Albrecht Dürer, geboren 1471, gestorben 1530.
Der Nürnberger Maler, der ganz Europa faszinierte; mit seinem scharfen Auge, seiner Meisterschaft in Linienführung und Plastizität, sowie seiner Leihwagenfirma.“

2

Montag, 5. Januar 2015, 14:12

Hallo Shab.

Möglichkeit 1) Du zeichnest den Text immer vorher auf eine Hilfsbitmap und lässt da dann ein Schwellenwert drüberlaufen, der je nachdem den Pixel voll deckend korrigiert oder transparent macht. Anschließend kopierst Du die Hilfsbitmap auf deine Zielbitmap.

Möglichkeit 2) Du findest heraus, wie die RGSS Font Struktur auf "C-Ebene" im Speicher aussieht (vergleiche RGSS Bitmaps im Speicher). Du kannst dich da dann reintricksen und wenn Du Glück hast, liegt da eine LOGFONT structure in der Du den lfQuality-Wert modifizieren kannst. Aber mit Fonts habe ich lange nichtmehr gearbeitet (bzw. auf C++ Ebene gäb's einfach eine Funktion SetTextRenderingHint mit der Du das Zeichnen auf Aliased setzen kannst), da kann ich dir ad hoc keine fertige Lösung bieten.

Möglichkeit 3) Du guckst, ob man das Font File vielleicht so anpassen kann, das es kein AntiAlias mehr unterstützt. (Ob das so funktioniert weiß ich nicht, hab nur in Erinnerung, dass das nicht von allen Schriften unterstützt wird.)

Shabraxxx

Projekt: Ressourcenbereich & Seitenredaktion

  • »Shabraxxx« ist der Autor dieses Themas

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Nachricht senden

3

Montag, 5. Januar 2015, 15:41

Hallo Playm,

danke für die Antwort, und willkommen zurück. ;)

Möglichkeit eins (favorisiert, da einfach klingend) und zwei scheiden vermutlich aufgrund meiner Rubin-Unkenntnis aus (sprich das müsste mir wohl Playm jemand anderes basteln); Möglichkeit drei ist auszuschließen, es handelt sich um eine Bitmap-Font, die sich in anderen Anwendungen auf ihrer Standardgröße (Vielfache von 18) auch korrekterweise ohne Kantenglättung darstellen lässt.
Gruß, Shabz
„Albrecht Dürer, geboren 1471, gestorben 1530.
Der Nürnberger Maler, der ganz Europa faszinierte; mit seinem scharfen Auge, seiner Meisterschaft in Linienführung und Plastizität, sowie seiner Leihwagenfirma.“

4

Montag, 5. Januar 2015, 23:36

Hm, ich habe hier mal eben was geschrieben, was funktionieren könnte ( habe es mit Arial, statt deinem Font ausprobiert )
Spoiler: Entwurf

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# Nur für Tests. Es werden keine Nutzungsrechte eingeräumt.
class Color
  #--------------------------------------------------------------------------
  # * Bestimme den Unterschied zwischen zwei Farben anhand ihrer Farbwerte
  #     0 bei identische Farben
  #     Immer 255 wenn mit was anderem als einer Farbe verglichen wird
  #--------------------------------------------------------------------------
  def difference( color )
    return 255 unless color.kind_of?( Color )
    diff = (red - color.red).abs
    diff+= (green - color.green).abs
    diff+= (blue - color.blue).abs
    diff+= (alpha - color.alpha).abs
    diff / 4
  end
end
 
class Window_Base
  #--------------------------------------------------------------------------
  # * Schwellenwert
  #--------------------------------------------------------------------------
  Alias_Trashold = 32 # something between 0 and 255
  #--------------------------------------------------------------------------
  # * Entferne beim Zeichnen die Kantenglättung
  #--------------------------------------------------------------------------
  def draw_text_aliased( *args )
    temp = Bitmap.new( contents.width, contents.height )
    temp.draw_text( *args )
    for x in 0...contents.width
      for y in 0...contents.height
        pixel = temp.get_pixel( x, y )
        next if pixel.alpha.zero?
        if contents.font.color.difference( pixel ) < Alias_Trashold
          temp.set_pixel( x, y, contents.font.color )
        else
          temp.set_pixel( x, y, Color.new(0,0,0,0) )
        end
      end
    end
    contents.blt( 0, 0, temp, temp.rect )
    nil
  end
end
zum Lesen den Text mit der Maus markieren

Und zum testen hier mal ein angepasstes PlayTime Fenster:
Spoiler

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#==============================================================================
# ** Window_PlayTime Testanpassung
#------------------------------------------------------------------------------
#  Als neues Skript über Main einfügen
#==============================================================================
 
class Window_PlayTime < Window_Base
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = system_color
    draw_text_aliased(4, 0, 120, 32, "Play Time")
    @total_sec = Graphics.frame_count / Graphics.frame_rate
    hour = @total_sec / 60 / 60
    min = @total_sec / 60 % 60
    sec = @total_sec % 60
    text = sprintf("%02d:%02d:%02d", hour, min, sec)
    self.contents.font.color = normal_color
    draw_text_aliased(4, 32, 120, 32, text, 2)
  end
end
zum Lesen den Text mit der Maus markieren

Wenn dir das schon reicht und das mit deinem Font gut aussieht, kann ich das nochmal sauber aufbereiten.

Möglichkeit 2 klingt eigentlich spannend und interessant, aber aktuell fehlt mir die Zeit dazu.

Shabraxxx

Projekt: Ressourcenbereich & Seitenredaktion

  • »Shabraxxx« ist der Autor dieses Themas

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Nachricht senden

5

Montag, 5. Januar 2015, 23:55

Hallo Playm,

ein dickes Danke – in einem Testprojekt funktioniert es einwandfrei.

Ich bräuchte diese Funktion nun explizit im Message- und Choice-Window, aber da mir Playm jemand in Bälde ja ohnehin ein sehr kleines CMS mit abgeänderten Versionen eben dieser bastelt [Zitierung benötigt], hat das vermutlich noch Zeit, nicht, dass es da zu Inkompatibilität kommt.
Gruß und Danke, Shabz
„Albrecht Dürer, geboren 1471, gestorben 1530.
Der Nürnberger Maler, der ganz Europa faszinierte; mit seinem scharfen Auge, seiner Meisterschaft in Linienführung und Plastizität, sowie seiner Leihwagenfirma.“

6

Dienstag, 6. Januar 2015, 00:22

Gern geschehen.

Nur aus Interesse: Welchen Schwellenwert hast Du als subjektiv besten empfunden? Hatte angenommen der würde um die 128 herum liegen, aber tatsächlich macht sich bei einer "normalen" Schriftart ein Wert zwischen 0 und 64 am Besten.

Wenn akut kein Bedarf besteht, arbeite ich dass dann nicht weiter aus. Tatsächlich halte ich das Skript für kantigen Text für nichts, was einen breiten Nutzen hat. :pardon:

Shabraxxx

Projekt: Ressourcenbereich & Seitenredaktion

  • »Shabraxxx« ist der Autor dieses Themas

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Nachricht senden

7

Dienstag, 6. Januar 2015, 00:45

Hallo Playm,

es hat mit den 32 perfekt funktioniert.
Gruß, Shabz
„Albrecht Dürer, geboren 1471, gestorben 1530.
Der Nürnberger Maler, der ganz Europa faszinierte; mit seinem scharfen Auge, seiner Meisterschaft in Linienführung und Plastizität, sowie seiner Leihwagenfirma.“

8

Mittwoch, 7. Januar 2015, 17:50

Möglichkeit 2) Du findest heraus, wie die RGSS Font Struktur auf "C-Ebene" im Speicher aussieht (vergleiche RGSS Bitmaps im Speicher). Du kannst dich da dann reintricksen und wenn Du Glück hast, liegt da eine LOGFONT structure in der Du den lfQuality-Wert modifizieren kannst. Aber mit Fonts habe ich lange nichtmehr gearbeitet (bzw. auf C++ Ebene gäb's einfach eine Funktion SetTextRenderingHint mit der Du das Zeichnen auf Aliased setzen kannst), da kann ich dir ad hoc keine fertige Lösung bieten.
Ganz so einfach ist das leider nicht. Das RGSS verwendet nämlich immer GGO_GRAY8_BITMAP (AA).

9

Mittwoch, 7. Januar 2015, 22:57

Frohes Neues, Cremno. o/
Lange nichtmehr gesehen.


Könntest Du noch mehr dazu schreiben? Mein Interesse ist geweckt.

Reborn

hat beim Stromkonzern schon Rabatt

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

10

Freitag, 9. Januar 2015, 13:08

Wie lautet die Funktion mit welcher GGO_GRAY8_BITMAP verwendet wird?
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

Social Bookmarks