Dear visitor, welcome to RPG Studio - Make your World real. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

Shabraxxx

Projekt: Ressourcenbereich & Seitenredaktion

  • "Shabraxxx" started this thread

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Send private message

1

Saturday, January 3rd 2015, 11:04pm

Unterbinden der Kantenglättung von Schrift

Hallo Guest,

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 has attached the following file:
  • alagard.zip (4.39 kB - 2 times downloaded - latest: Jan 5th 2015, 6:02am)
„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.“

Playm

RPG Studio Webmaster

  • Send private message

2

Monday, January 5th 2015, 2:12pm

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" started this thread

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Send private message

3

Monday, January 5th 2015, 3:41pm

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.“

Playm

RPG Studio Webmaster

  • Send private message

4

Monday, January 5th 2015, 11:36pm

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

Ruby Source code

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
highlight to read

Und zum testen hier mal ein angepasstes PlayTime Fenster:
Spoiler

Ruby Source code

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
highlight to read

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" started this thread

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Send private message

5

Monday, January 5th 2015, 11:55pm

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.“

Playm

RPG Studio Webmaster

  • Send private message

6

Tuesday, January 6th 2015, 12:22am

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" started this thread

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Send private message

7

Tuesday, January 6th 2015, 12:45am

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

Wednesday, January 7th 2015, 5:50pm

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).

Playm

RPG Studio Webmaster

  • Send private message

9

Wednesday, January 7th 2015, 10:57pm

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!

  • Send private message

10

Friday, January 9th 2015, 1:08pm

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
highlight to read

Social bookmarks