-
Die vorliegende Erfindung betrifft eine Schriftverwandlung ohne
Aliasing, einschließlich der Generierung einer Schriftart ohne
Aliasing, der entlang einer horizontalen Achse von einer und in
bezug auf eine Quellenschriftart verschoben wird.
-
Algorithmen zum Neigen von Abbildern auf einem Bildschirm für
die Erzeugung geneigter Abbilder, die in verschiedenen Winkeln
angeordnet sind, sind (beispielsweise) aus IBM Technical
Disclosure Bulletin Band 31, Nr. 3, August 1988, bekannt. Hierin
wird beschrieben, daß Bildpunkte um nicht-ganzzahlige Werte
verschoben werden können, wenn es sich bei dem zu neigenden
Abbild um ein Grauwertbild handelt, eine Anti-Aliasing-Methode
(Methode für den Konturenausgleich) wird jedoch nicht
beschrieben.
-
Ein Problem bei der Generierung von Abbildern auf einem
Bildschirm, wenn die Abbilder keine vertikal und/oder horizontal
ausgerichteten Konturen aufweisen, ist der Effekt des Aliasing.
Dies bedeutet, daß eine diagonale Kontur anstelle einer geraden
Linie eine Anzahl einzelner Sprünge oder "Treppenstufen"
aufweist. Ein Abbild mit Aliasing wird in der Regel als nicht
zufriedenstellend beurteilt. Die Größe und die Anzahl der
Sprünge hängt von der Auslösung des Bildschirms ab, d.h. von der
Anzahl der Bildpunkte pro Bildschirmeinheit. Wenn die Auflösung
des Bildschirms zunimmt, wird der Effekt des Aliasing weniger
offensichtlich. Bildschirme mit hoher Auflösung sind jedoch in
der Regel teuer, und unter Umständen läßt sich ihre Verwendung
für eine Reihe von Anwendungen zum Anzeigen von Zeichen nicht
rechtfertigen.
-
Die Generierung einer horizontal verschobenen Schriftart ohne
Aliasing, wie z.B. einer Kursivschriftart, aus einer
Quellenschriftart kann eine rechenaufwendige Aufgabe sein. Die
Generierung der Kursivschriftart führt jedoch zu einer
Reduzierung der allgemeinen Speicheranforderungen für
Schriftarten und kann daher doch wünschenswert sein.
-
Dementsprechend offenbart die vorliegende Erfindung eine Methode
zum Generieren einer zweiten, im wesentlichen von Aliasing
befreiten Darstellung eines Abbildobjektes aus einer ersten
Darstellung, wobei die zweite Darstellung horizontale Zeilen
aufweist, die aus Punkten bestehen, welche in bezug auf Punkte
der ersten Darstellung horizontal verschoben werden, wobei jeder
Punkt (k) der ersten Darstellung einen zugehörigen, hiermit
verbundenen Intensitätswert DOT1(k) aufweist, und wobei die
Methode die folgenden Schritte umfaßt:
-
für jede horizontale Zeile (1 bis m) innerhalb der ersten
Darstellung eines Zeichens und für jeden Punkt (1 bis j)
innerhalb einer horizontalen Zeile
-
wird ein modifizierender Wert (MODk) bestimmt, der einem
Punkt (k) der ersten Darstellung zugeordnet ist, wobei MODk
von DOT1(k) des Punktes dot(k) abhängt; und
-
wird ein Intensitätswert (DOT2(k)) eines zugehörigen
Punktes für die zweite Darstellung bestimmt, wobei der
Intensitätswert des zugehörigen Punktes gemäß folgendem
Ausdruck bestimmt wird:
-
DOT2(k) = ( ( DOT1(k) - MODk ) + MODk-1 ),
-
wobei MODk-1 ein modifizierender Wert eines angrenzenden
Punktes (k-1) auf der horizontalen Zeile ist.
-
Wie hierin nachfolgend durch ein Beispiel beschrieben wird, wird
eine zweite kursive Darstellung eines Bitmap-Zeichens aus einer
ersten Darstellung desselben in einer Roman-Schriftart
generiert. Jeder Punkt der zweiten Darstellung wird um einen
fraktionalen Betrag (a/b) einer Punktbreite in bezug auf einen
entsprechenden Punkt der ersten Darstellung verschoben. Es wird
eine Übertragswerttabelle generiert, die eine Anzahl von Reihen
(R) hat, die gleich (b) ist, und die eine Anzahl von Spalten (C)
hat, die gleich möglichen Werten (DOT1(k)) eines Bildpunktes
ist. Der Wert der einzelnen Tabelleneinträge (R,C), d.h. der den
Bildpunkt modifizierenden Werte MODk, wird gemäß dem folgenden
Ausdruck bestimmt:
-
MODk = ( ( DOT1(k) / b ) * a),
-
in der * eine Multiplikation und / eine Division kennzeichnet
und in der (a) für die erste Reihe den Wert null, für die zweite
Reihe den Wert eins und für die letzte Reihe den Wert (b-1) hat.
-
Als nächstes wird für jede horizontale Zeile (1 bis m) innerhalb
des ersten Zeichens bzw. Quellenzeichens und für jeden Punkt (1
bis j) innerhalb einer horizontalen Zeile anhand der
Übertragswerttabelle der modifizierende Wert (MODk) eines Punktes
(k) bestimmt. Die Punkte der horizontalen Eingabezeile werden
bei einer Rechtsneigung von links nach rechts verarbeitet. Der
Wert des Quellenzeichenpunktes (DOT1(k) und die Reihennummer
werden als Bezugswerte für die Tabelle verwendet, um den Wert
MODk abzufragen. MODk wird als "nächster Übertragswert"
gespeichert. Für den ersten Punkt (dot(1)) einer Reihe wird ein
Term "letzter Übertragswert" (MODk-1) auf null gesetzt. Ein Wert
(DOT2(k)) eines zugehörigen Punktes für das zweite Zeichen wird
gemäß folgendem Ausdruck bestimmt:
-
DOT2(k) = ( ( DOT1(k) - MODk ) + MODk-1 ).
-
Nach dem Bestimmen von DOT2(k) für die Punkte 1 bis j des
Eingabezeichens wird mit der Methode ein Wert für einen
zusätzlichen Ausgabepunkt (DOT2(j+1) bestimmt, der gleich MODk-1
ist.
-
Dies wird als praktische Vorgehensweise zum Generieren einer
zweiten Schriftart ohne Aliasing aus einer ersten Schriftart
bzw. Quellenschriftart angesehen, wobei es sich bei der zweiten
Schriftart um einer geneigten Kursivschriftart ohne Aliasing und
bei der ersten Schriftart um eine standardmäßige unkomprimierte
gerade Quellenschriftart handelt.
-
Die vorliegende Erfindung wird unter Bezugnahme auf eine
Ausführungsart derselben, die als Beispiel dient, weiter
beschrieben, wie dies in den beiliegenden Zeichnungen
illustriert wird, bei denen
-
FIG. 1 ein erstes Zeichen zeigt, das in einer Quellenschriftart
dargestellt wird;
-
FIG. 2 ein zweites Zeichen zeigt, das aus dem ersten Zeichen
generiert wurde; und
-
FIG. 3 den Inhalt einer hierbei verwendeten Referenztabelle
zeigt.
-
Fig. 1 zeigt ein unkomprimiertes erstes Zeichen bzw.
Quellenzeichen 10, in diesem Fall ein "H", das aus einer Anzahl
von anzeigbaren Punkten oder Bildpunkten besteht, von denen
jeder einen aus vier Bit bestehenden Intensitätswert zwischen 0
und F&sub1;&sub6; aufweist. Das Zeichen 10 kann auf einem Bildschirm wie
z.B. einer allgemein bekannten Rasterabtast-Kathodenstrahlröhre
angezeigt werden. Die einzelnen Bildpunktwerte werden in einem
Speicher eines Datenverarbeitungssystems gespeichert und sind
einer Zentraleinheit (CPU) zugänglich. Es ist bekannt, daß die
Werte der Hintergrund-Bildpunkte, die nicht gezeigt werden, alle
auf null oder auf einen Wert gesetzt werden können, der einen
erwünschten Kontrastgrad zum Wert der Bildpunkte des Zeichens 10
aufweist. Bei einigen Ausführungsarten kann jeder Bildpunkt
einen Wertebereich aufweisen, der kleiner oder größer als der
Bereich null bis F&sub1;&sub6; ist. Obwohl die nachfolgende Beschreibung im
Kontext alphanumerischer Zeichen erfolgt, sollte man sich bewußt
sein, daß die Ausführungen der Erfindung allgemein auf eine
große Anzahl unterschiedlicher Arten von Bildobjekten anwendbar
sind.
-
Fig. 2 zeigt ein zweites Zeichen bzw. Zielzeichen 20, das anhand
des Quellenzeichens 10 generiert wird. Das Zeichen 20 weist eine
Vielzahl von Punkten oder Bildpunkten auf, die entlang einer
horizontalen X-Achse um einen fraktionalen Teil eines
Bildpunktes verschoben werden, in diesem Fall um 1/4 eines
Bildpunktes. Andere Verschiebungen um beispielsweise 3/8 oder
7/14 eines Bildpunktes sind ebenfalls möglich. Die Verschiebung
wird reihenweise in der Art angewandt, daß dem Zeichen 20 eine
generelle vertikale Neigung verliehen wird. Wie in den Figuren
gezeigt wird, ist das Zielzeichen 20 die Kursivform des
Quellenzeichens 10.
-
Es kann angemerkt werden, daß bestimmten, mit der Kontur in
Beziehung stehenden Bildpunkten des Zielzeichens 20
unterschiedliche Intensitätswerte zugeordnet wurden. Der
generelle Effekt dieser Zuordnung von Intensitätswerten liegt
darin, daß die diagonal angeordneten Konturen des abgebildeten
Zeichens optisch geglättet und gerader gemacht werden sollen.
Dies bedeutet, das Zeichen 20 weist kein Aliasing auf.
-
In einem anfänglichen Schritt des Verwandlungsprozesses wird
eine Übertragswerttabelle des in Fig. 3 gezeigten Typs erstellt.
Die Tabelle hat eine Anzahl von Reihen (n), die gleich dem
Nenner der Bildpunktverschiebung ist, beispielsweise vier Reihen
für eine Bildpunktverschiebung um 1/4 oder acht Reihen für eine
Bildpunktverschiebung um 3/8. Die Bildpunkt-Übertragswerte, die
der ersten Reihe zugeordnet sind, werden alle auf null gesetzt.
Die Bildpunkt-Übertragswerte, die der nächsten Reihe zugeordnet
sind, werden alle gleich 1/n des Bildpunktwertes gesetzt. Für
den Bildpunktwert 8 lautet der Übertragswert beispielsweise
3(1/4) oder 2. Nicht-ganzzahlige Ergebnisse werden so auf- oder
abgerundet, wie dies erforderlich ist, um eine ganze Zahl zu
erhalten. Die Bildpunkt-Übertragswerte, die der nächsten Reihe
zugeordnet sind, werden gleich 2/n des zugehörigen
Bildpunktwertes gesetzt, die der nächsten Reihe gleich 3/n des
zugehörigen Bildpunktwertes usw.
-
Dies bedeutet, daß jeder Punkt der zweiten Zeichendarstellung um
einen fraktionalen Betrag (a/b) einer Punktbreite in bezug auf
einen zugehörigen Punkt der ersten Darstellung verschoben wird.
Die Übertragswerttabelle hat eine Anzahl von Reihen (R), die
gleich (b) ist, sowie eine Anzahl von Spalten (C), die gleich
möglichen Werten (DOT1(k)) eines Bildpunktes ist. Der Wert der
einzelnen Tabelleneinträge (R,C), d.h. die modifizierenden Werte
MODk, werden gemäß folgendem Ausdruck bestimmt:
-
MODk = ( ( DOT1(k) / b ) * a ), (1)
-
wobei * eine Multiplikation und / eine Division kennzeichnet und
(a) einen Wert von null für die erste Reihe, einen Wert von eins
für die zweite Reihe und einen Wert von (b-1) für die letzte
Reihe aufweist.
-
Anschließend wird die auf diese Weise generierte
Übertragswerttabelle verwendet, um das Eingabezeichen 10 für die
Generierung des Ausgabezeichens 20 syntaktisch zu analysieren.
Am Anfang einer bestimmten Reihe von Bildschirmbildpunkten bzw.
einer Abtastzeile wird die entsprechende Reihe der
Übertragswerttabelle ausgewählt. Es ist erkennbar, daß für eine
Bildpunktverschiebung, die einen Nenner von vier aufweist, die
vier Reihen der Tabelle wiederholt von unten nach oben in der
gezeigten Weise auf das Eingabezeichen 10 angewandt werden. Es
muß dabei angemerkt werden, daß eine syntaktische Analyse des
Eingabezeichens von oben nach unten ebenfalls möglich gewesen
wäre.
-
Für jede horizontale Zeile (1 bis m) innerhalb des
Quellenzeichens 10 und für jeden Punkt (1 bis j) innerhalb einer
horizontalen Zeile wird anhand der Übertragswerttabelle der
modifizierende Wert MODk eines Punktes dot (k) bestimmt. Die
Punkte der horizontalen Eingabezeile werden für eine
Rechtsneigung von links nach rechts verarbeitet. Der Wert des
Quellenzeichenpunktes (DOT1(k)) und die Reihennummer werden
verwendet, um auf die Tabelle Bezug zu nehmen und den Wert MODk
abzurufen. MODk wird als "nächster Übertragswert" gespeichert.
Für den ersten Punkt (dot(1)) einer Reihe wird ein Term MODk-1
"letzter Übertragswert" auf null gesetzt. Ein Wert (DOT2(k))
eines zugehörigen Punktes für das zweite Zeichen 20 wird anhand
folgendem Ausdruck bestimmt:
-
DOT2(k) = (( DOT1(k) - MODk ) + MODk-1 ) (2)
-
Nach dem Bestimmen von DOT2(k) für die Punkte 1 bis j des
Eingabezeichens wird mit der Methode ein Wert für einen
zusätzlichen Ausgabepunkt (DOT2(j+1)) bestimmt, der gleich MODk-1
ist.
-
Als Beispiel und unter Bezugnahme auf die Figuren weist der
erste Punkt (dot1(1)) der untersten Reihe 1 des Eingabezeichens
10 einen Wert von A&sub1;&sub6; auf. Da dies der erste Punkt der Zeile ist,
wird MODk-1 auf null gesetzt. Der Eintrag der Tabelle, der Reihe
1 und einem Zeichenwert von A&sub1;&sub6; entspricht, führt dazu, daß MODk
der Wert 3 zugeordnet wird. Die Auf lösung nach dot2(1) ergibt
DOT2(1) = (( A&sub1;&sub6; - 3 ) + 0 ) = 7. Als nächstes hat dot1(2) einen
Wert von F16, der dazu führt, daß Modk aus der Tabelle ein Wert
von 4 zugeordnet wird. MODk-1 wurde nach der Verarbeitung des
ersten Punktes der Abtastzeile ein Wert von 3 zugeordnet. Die
Auflösung nach dot2(2) ergibt DOT2(2) = (( F&sub1;&sub6; - 4 ) + 3 ) = E&sub1;&sub6;.
Nach der Verarbeitung aller Eingabepunkte von Reihe 1 wird ein
Wert von DOT2(j+1) mit MODk-1 bzw. 3 in diesem Fall
gleichgesetzt. Da ein Bildpunkt normalerweise am Ende jeder
Abtastzeile addiert wird, wird für Kursivschriftzeichen ein Wert
von eins zu einer berechneten Zeichenbreite hinzugefügt, um zu
verhindern, daß sich angrenzende Zeichen überschneiden.
-
Der generierte Zeichensatz, der aus obiger Vorgehensweise
resultiert, kann in einer Zeichengenerierungseinrichtung
gespeichert werden, um einen Bildschirm in der bekannten Weise
mit Bildpunkten unterschiedlicher Intensität zu versorgen.
-
Eine in der Programmiersprache C geschriebene Routine, in der
die obigen Arbeitsgänge implementiert werden, wird nachfolgend
aufgeführt.