DE3587690T2 - Verfahren um Schrifttypen mit Skalaänderungen herzustellen. - Google Patents
Verfahren um Schrifttypen mit Skalaänderungen herzustellen.Info
- Publication number
- DE3587690T2 DE3587690T2 DE3587690T DE3587690T DE3587690T2 DE 3587690 T2 DE3587690 T2 DE 3587690T2 DE 3587690 T DE3587690 T DE 3587690T DE 3587690 T DE3587690 T DE 3587690T DE 3587690 T2 DE3587690 T2 DE 3587690T2
- Authority
- DE
- Germany
- Prior art keywords
- skeleton
- points
- character
- point
- grid
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/20—Contour coding, e.g. using detection of edges
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Controls And Circuits For Display Device (AREA)
- Digital Computer Display Output (AREA)
Description
- Die vorliegende Erfindung bezieht sich auf Verfahren zur Verarbeitung von graphischen Bildern und im speziellen auf ein Verfahren zur Erzeugung wirklich skalierbarer Schrifttypen, welches in der rage ist, "bit-map font"-Daten bei jeder Auflösung und bei jeder Schriftgröße bereitzustellen.
- Das Problem der Darstellung von graphischen Bildern auf digital gesteuerten Geräten ist ein klassisches. Graphische Bilder werden empfangen und üblicherweise ausgeführt in einer "analogen" Art und Weise mit kontinuierlichen, geglätteten fließenden Linien, unendlich vielen Winkeln und subtilen Variationen in ihren internen Abmessungen.
- Die Betrachtung eines graphischen Bildes als einfach einen in Tinte auf einem Stück Papier dargestellten Punkt würde unendlich viele Winkel ergeben, die entlang dem Umriß, welcher den Punkt in 360 Grad umgibt, gemessen werden. Gleichfalls könnte eine unendliche Anzahl von Messungen entlang dem Punkt an einer unendlichen Anzahl von Stellen vorgenommen werden.
- Die Darstellung eines solchen graphischen Bildes in "digitaler" Form legt jedoch größere Restriktionen auf seine Erscheinung. Zunächst muß die unendliche und subtile Variation der Abmessungen durch einen diskreten Satz von Abmessungen dargestellt werden, wie zwischen einem endlichen Satz von Stellen in einer zweidimensionalen Koordinatenebene gemessen. Außerdem gibt es in vielen digitalen Systemen nur zwei diskrete Winkel: einen vertikalen und einen horizontalen.
- In Anbetracht dieser Restriktionen kann man nur eine "Illusion" des Punktes erzeugen, seine Größe, Glätte und Position stellen einen Kompromiß dar. Der Erfolg der Illusion (oder der Grad an Kompromiß, mit dem das Bild verbunden ist) ist direkt von zwei Faktoren abhängig.
- Zum ersten bestimmt die Auflösung des digitalen Systems die Anzahl der adressierbaren Stellen und folglich die Anzahl der darstellbaren Abmessungen, welche bei der Illusion zu Hilfe genommen werden können - je größer die Auflösung ist, um so besser ist die Qualität der Illusion.
- Zum zweiten trägt die Wahl geeigneter, zur Darstellung des Bildes genutzter Schlüsselwinkel, -linien und -abmessungen signifikant zum Erfolg der Illusion bei. Bei dem Beispiel des Punktes wären Schlüsselpunkte, die zur Erzeugung einer Illusion des Punktes festgelegt werden, dessen Höhe und Breite. Dies macht an sich jedoch noch keinen Unterschied zwischen einem rechteckigen und einem runden Punkt. Die Illusion eines runden Punktes könnte deshalb durch Einkerben der Ecken des Rechtecks erzeugt werden. Dadurch wird eine Illusion von nichtvertikalen und nichthorizontalen Winkeln erzeugt.
- Eine zusätzliche Schwierigkeit entsteht, wenn digital definierte Bilder zu skalieren sind. Im wesentlichen bedeutet dies die Übertragung des Bildes aus einem digitalen System in ein anderes (d. h. aus einer "Illusion" in eine andere).
- Diese digitalen Bilder können entweder als Umrisse, welche die Grenzen des Bildes definieren, oder als Punkte oder Striche, welche das Innere des Bildes füllen, existieren. In jedem Fall sind die fundamentalen Probleme die gleichen. Keine Darstellung kann das graphische Bild ohne einen gewissen Detailverlust definieren. Eine Skalierung des Bildes kann zu weiterem Detailverlust beitragen. Die Umwandlung von Umrissen in Striche und zurück zerstört ebenfalls Details.
- Da das grundlegende Interesse darin besteht, feste gefüllte Bilder zu erzeugen, sind die folgenden Anmerkungen auf solche beschränkt, welche die Erzeugung das Innere graphischer Bilder füllender Punkte oder Striche betreffen. Im wesentlichen gibt es zwei Methoden, um feste gefüllte graphische Bilder in verschiedenen Größen zu erzeugen, welche beispielsweise in "Proceedings of the IEEE, Vol. 68, No. 7, Juli 1980, Seiten 909 - 922" offenbart sind.
- Die erste Methode besteht darin, eine aus Strichen und Punkten zusammengesetzte digitale Darstellung zu nutzen, welche sorgfältig erzeugt wurde, um die optimale Illusion des Bildes zu erzeugen. Das Skalieren erfolgt durch Wiederholung von Strich- oder Punktmustern bei Vergrößerung und durch Entfernung von Strichen und Punkten bei Verkleinerung. Das Problem entsteht bei der Festlegung, welche Punkte oder Striche der Schlüssel zur Erzeugung einer optimalen Illusion bei der gewünschten Skaliergröße sind. Da wichtige Informationen bezüglich des originalen "analogen" graphischen Bildes fehlen, kann diese Methode keine optimalen, qualitativ hochwertigen Bilder liefern.
- Die zweite Methode besteht darin, das digitale Bild anfänglich als einen Umriß zu definieren. Dieser Umriß kann dann skaliert und mathematisch mit Strichen oder Punkten "gefüllt" werden. Wenn der originale Umriß ausreichend detailliert beschrieben ist, kann die resultierende Illusion gut sein. Da der Umriß jedoch nur eine Beschreibung einer hohlen Schale ist und die Striche oder Punkte ein digitales System repräsentieren, stellen wiederum die Größe, Position, Glätte und internen Abmessungen des Bildes einen Kompromiß dar. Die unvermeidbaren mathematischen Fehler, die durch Interpretation "analoger", Bilder als digitale verursacht werden, erzeugen unvorhersehbare Ergebnisse.
- Die Ausgabe von Zeichen (Schriften) als graphische Bilder auf einem Graphikausgabegerät erfordert die Skalierung von digitalen Bildern. Wenn der Umriß des Zeichens mit einer ausreichend hohen Auflösung beschrieben ist, kann man das digitale Bild als "analog" betrachten, das heißt, es hat kein substantielles Detail verloren. Die Skalierung dieser digitalen Darstellung für die Erzeugung von Strichen oder Punkten zwecks Ausgabe mit geringerer Auflösung-erfordert einige spezielle Überlegungen, um optimale Zeichenillusionen zu erzeugen. Es folgt die grundlegende Beschreibung eines Systems, welches ausgelegt ist, Schrifttypen über eine Vielzahl von Größen und Ausgangsauflösungen zu skalieren, während das optimale Zeichendesign aufrechterhalten wird.
- Die vorliegende Erfindung ist ein Prozeß zur Erzeugung wirklich skalierbarer Schrifttypen, der in der Lage ist, "bit-map font"-Daten bei jeder Auflösung und jeder Schriftgröße bereitzustellen. Die Erfindung verringert die ästhetischen Probleme, die auftreten, wenn Umrißbeschreibungen von Zeichen mathematisch mittels linearer Standardmethoden auf geringe Auflösungen/Schriftgrößen skaliert werden. Durch die Erfindung wird eine verbesserte Skalierbarkeit erreicht, indem auf die Zeichendatenbasis festgelegt werden: (1) Schlüsselpunkte auf dem Zeichenumriß, die SKELETTPUNKTE genannt werden, und spezifisch zugeordnetet ZEICHENABMESSUNGEN zwischen diesen SKELETTPUNK- TEN. Diese zusätzlichen Daten liefern Skalieralgorithmen mit der notwendigen Steuerung der Beziehungen zwischen den Abmessungen, weil das Zeichen skaliert und auf ein Punktraster übertragen wird.
- Die vorliegende Erfindung, wie in Anspruch 1 beansprucht, nutzt ein Verfahren zum Skalieren der Datenbasis von Zeichen von einer in ein digital gesteuertes Gerät eingegebenen und dort gespeicherten Datenbasis zum Bereitstellen von "bit-map fonts" für graphische Bilder, wobei die eingegebene Datenbasis Daten enthält, die für die Koordinaten einer Vielzahl von auf zumindest einem fortlaufenden, geschlossenen Schleifenumriß eines Zeichens liegenden Punkten repräsentativ sind, wobei der Umriß in eine Vielzahl von aufeinanderfolgenden, aneinander angrenzenden und geordneten Skalierungssegmenten, von denen jedes Skalierungssegment zwischen einem Punktepaar auf dem Umriß des Zeichens angeordnet ist, aufgeteilt ist, wobei das Punktepaar auf dem Zeichenumriß einen ersten Skelettpunkt und einen zweiten Skelettpunkt darstellt, die Skelettpunkte ein Unterelement der Koordinaten des Zeichenumrisses sind und jeweils ein wichtiges sichtbares Merkmal des Zeichens wie beispielsweise die Kante eines Grundstriches oder das Oberteil der Buchstabenrundung oder die Gabelung, an der sich zwei Striche schneiden, darstellen, wobei die Skelettpunkte in der Datenbasis in einer baumartigen Anordnung miteinander verbunden sind, und wobei das Verfahren aus folgenden Schritten besteht:
- a) Verarbeiten der eingegebenen Datenbasis durch Verschieben aller Koordinaten in einem jeden Skalierungssegment, um den entsprechenden ersten Skelettpunkt mit einem Ausgangsgitter auszurichten, welches eine Reihe von horizontalen und vertikalen Linien zum Festlegen der korrekten Position der Skelettpunkte aufweist,
- b) weiteres Verarbeiten der Koordinaten der Skalierungssegmente durch lineare Skalierung jeden Skalierungssegments mit einem Skalierfaktor, der den entsprechenden zweiten Skelettpunkt mit dem Ausgangsgitter ausrichtet, wobei die Skelettpunkte aus X- und Y-Skelettpunkten bestehen und diese Punkte richtig ausgerichtet werden, wenn die Y- und X-Werte glatt durch eine Y- und X-Pixel-Dimension teilbar sind und wobei die Verschiebung und die Skalierung derart ausgeführt werden, daß bei der Verschiebung eines Skelettpunktes die damit verbundenen Skelettpunkte um denselben Betrag in Richtung der Zweige des Baumes verschoben werden, jedoch die Skelettpunkte in Richtung der Wurzeln des Baumes nicht verändert werden.
- Ästhetische Probleme bei der Skalierung von Zeichen über Geräte mit geringer Auflösung entstehen durch die Tatsache, daß (1) Antiqua-Zeichen aus Strichen bestehen, (2) die Striche im allgemeinen horizontal und vertikal sind, um einen einheitlichen Rhythmus oder eine einheitliche Struktur auf der Seite beizubehalten, und (3) die allgemeine Ausrichtung der Linien der Zeichen parallel oder senkrecht zu der Richtung ist, in der Punkte auf der Seite durch das Ausgabegerät ausgegeben werden. Das Problem kann man sich als ähnlich dem bei der Wiederanzeige von Rasterbildern vorstellen. Wenn der Wiederanzeigewinkel dem originalen Anzeigewinkel gleich ist, kann ein störendes Moir muster entstehen. Um den Moir effekt zu verringern, wird der Wiederanzeigewinkel verändert. Dies erklärt, warum Strichschwärze und -fettheitsgrad bei kursiver Schrift oder anderen diagonalen Schriftarten weniger Variation aufweisen und weshalb, theoretisch, ein geringerer Bedarf bestehen sollte, solche Strichschwärzen und -fettheitsgrade bei anderen Winkeln als bei Hochformat, Querformat, umgekehrten Hochformat und umgekehrtem Querformat zu steuern.
- Entsprechend besteht eine allgemeine Aufgabe der Erfindung darin, ein Verfahren zur Skalierung der Datenbasis von Zeichen zur Verfügung zu stellen, um "bit-map font"-Daten bei jeder Auflösung und jeder Schriftgröße bereitzustellen.
- Eine weitere Aufgabe der Erfindung besteht darin, eine Zeichendatenbasis bereitzustellen, welche Schlüsselpunkte auf dem Zeichenumriß und die Zeichenabmessungen zwischen diesen Schlüsselpunkten enthält.
- Ein Merkmal der Erfindung besteht darin, daß die Datenbasis von Zeichen innerhalb jeder Zeichenform eine Substruktur von verbundenen Zeichenpunkten und -linien und deren ästhetische Beziehungen so definiert, daß die Zeichenintegrität beibehalten werden kann, während die Form zur Punktrasterbildung verändert wird.
- Ein weiteres Merkmal der Erfindung besteht darin, daß die Steuerung der spezifischen Zeichenabmessungen durch Festlegung der Verarbeitung von verbundenen Zeichenpunkten und -linien in einer baumartigen Struktur Vorrang erhält.
- Ein weiteres Merkmal der Erfindung besteht darin, daß die Substrukturpunkte und -linien der Zeichenform an einem Gitter ausgerichtet werden, während spezifische Nicht-Gitter-Ausrichtung genutzt wird, um die Winkel diagonaler Zeichenstriche zu steuern.
- Noch ein weiteres Merkmal der Erfindung besteht darin, daß Abmessungssteuerungen automatisch abgeschaltet werden, wenn die Ausgangspunktrasterauflösung hoch genug ist, um genau jede Veränderung solcher Abmessungen anzuzeigen, welche in die Zeichenform hinein angelegt sein können.
- Ein weiteres Merkmal der Erfindung besteht darin, daß Zeichenumrisse durch spezifische Y-Klassen oder -Zonen so segmentiert werden, daß alle Zeichenpunkte und -linien, die in die zugeordnete Zone fallen, dadurch einheitlich behandelt werden.
- Noch ein weiteres Merkmal der Erfindung besteht darin, daß Konflikte, welche durch die Konvergenz der verschiedenen Wurzeln und Äste der baumartigen Datenstruktur an demselben Zeichenpunkt entstehen, durch Aufnahme eines zusätzlichen Punktes in die Zeichenkoordinatenliste so vermieden werden, daß der zusätzliche Punkt mit einem Ast oder einer Wurzel verbunden wird, während der originale Punkt mit dem anderen verbunden bleibt.
- Ein weiteres Merkmal der Erfindung besteht darin, daß absolute Definition für jene Segmente entlang der Zeichenumrisse zur Verfügung gestellt wird, welche skaliert ("gedehnt" oder "zusammengepreßt") werden sollen, um Zeichenpunkte und -linien gegen das Ausgangsgitter verschieben zu lassen.
- Diese Aufgaben und andere Aufgaben und Merkmale der Erfindung sind am besten anhand einer detaillierten Beschreibung einer ihrer bevorzugten, zur Illustration ausgewählten und in den beiliegenden Zeichnungen dargestellten Ausführungsformen zu verstehen.
- Fig. 1 ist eine Darstellung eines originalen Zeichens, welches durch eine Gruppe von X/Y-Paaren definiert ist, welche in Reihenfolge um den Zeichenumriß aufgelistet sind.
- Fig. 2 zeigt das Zeichen gemäß Fig. 1 mit den Y-Werten des gesamten Zeichens so bearbeitet, daß die absolute Position der Y-Linien auf eine geradzahlige Ausgangspixel- oder Y-Gitter-Linie fällt.
- Fig. 3 ist ein Diagramm, welches die Bearbeitung des Zeichenumrisses zeigt, um eine optimale Übertragung auf ein Punktraster durch Anwendung und Verarbeitung von Skelettinformationen zu erzeugen. Das Diagramm gemäß
- Fig. 3 ist für die Verwendung als eine Auflage für das Zeichen gemäß Fig. 2 angelegt.
- Fig. 4 zeigt das Zeichen gemäß Fig. 2 nachdem die Skelett- und damit verbundenen Punkte nur entlang der X-Achse entsprechend verschoben und am Gitter oder nicht am Gitter ausgerichtet wurden, wobei alle anderen Punkte entlang dem Zeichenumriß durch Verschieben und lineares Skalieren repositioniert wurden, um einen glatten Umriß zu beizubehalten.
- Fig. 5 ist ein Diagramm der Reihenfolge der Verbindung von Skelettpunkten und durch Gitterausrichtung festgelegten Abmessungen. Das Diagramm gemäß Fig. 5 ist für die Verwendung als eine Auflage für das Zeichen gemäß Fig. 4 angelegt.
- Fig. 6 ist das Diagramm der Reihenfolge der Verbindung der Skelettpunkte und der durch Ausrichtung nicht am Gitter festgelegten Abmessungen. Das Diagramm gemäß
- Fig. 6 ist für die Verwendung als eine Auflage für das Zeichen gemäß Fig. 4 angelegt.
- Fig. 7 ist ein Diagramm, welches die Bearbeitung des Zeichenumrisses entlang der Y-Gitter-Achse zeigt und als eine Auflage für Fig. 8 vorgesehen ist.
- Fig. 8 zeigt das Zeichen nach der in Fig. 7 dargestellten Bearbeitung.
- Fig. 9 ist ein Diagramm der Reihenfolge der Verbindung von Skelettpunkten und Abmessungen auf der Y-Gitter-Achse. Fig. 9 ist für die Verwendung als eine Auflage für das Zeichen gemäß Fig. 8 angelegt.
- Der Prozeß der Erfindung wird am besten verstanden, wenn zuerst die Theorie und Terminologie des Prozesses beschrieben werden. Danach wird der Prozeß in Verbindung mit einer spezifischen Anwendung des Prozesses beschrieben, wie in der Folge von Zeichnungen, welche die Modifizierung eines Buchstaben "k" zeigen, dargestellt. Schließlich wird der FORTRAN-Quellcode für die Umsetzung des Prozesses dargelegt.
- Der Prozeß der Erfindung verbessert Skalierungsergebnisse durch Isolierung spezifischer Skalierprobleme und Bereitstellung der folgenden Steuerungen.
- Die Übertragung von geglätteten Zeichenumrissen auf einzelne Pixel resultiert oft in abgeflachten Umrissen oder "Hurenkinder"-Pixeln. Bei dieser Erfindung erfolgt die Übertragung so, daß benachbarte Strich-"Verläufe" von optimaler Länge sind, um die bestmögliche Umrißdarstellung zu erzeugen. Dies wird erreicht, indem Punkte entlang dem Umriß entweder spezifisch an dem festgelegten Gitter ausgerichtet oder spezifisch nicht ausgerichtet werden. Der Begriff Gitter, wie er hierin verwendet wird, bezieht sich auf eine Reihe von horizontalen und vertikalen Linien, welche sich in der Mitte aller adressierbaren Punkte auf dem Ausgabegerät kreuzen. Natürlich variiert dieses Gitter in der Dichte in Abhängigkeit von der Auflösung des Ausgabegeräts und der Schriftgröße, auf die der Zeichenumriß zu skalieren ist. Im allgemeinen müssen die meisten extremen x-Werte und extremen y-Werte entsprechend mit dem Gitter ausgerichtet sein, während größere diagonale Striche dies nicht tun sollten.
- Aufgrund von geringen "Unregelmäßigkeiten", welche absichtlich in Zeichenumrissen angelegt werden, um optische Regelmäßigkeit zu erzeugen, sind Zeichenhöhen, -Grundlinien, etc. oft unkontrollierbar abgerundet, um nichtausgerichtete Zeichen zu erzeugen. Deshalb muß eine Vorkehrung getroffen werden, um bestimmte horizontale Schlüssellinien einer Schrift steuern zu können. Dies muß so erfolgen, daß interne Zeichenformen korrekte interne Proportionen beibehalten.
- Zu diesem Zweck werden spezifische Segmente entlang von Zeichenumrissen verbunden, um "Bänder" (Y-KLASSEN) zu definieren, welche horizontal von Zeichen zu Zeichen durch eine Zeile von Text verlaufen. Ein typisches Band wird durch die y-Werte der Grundlinie und der x-Höhe definiert. Alle internen Formen, die in jenes Band fallen, werden vertikal skaliert, um den y-Wert, welcher die Grundlinie darstellt, auf den definierten Grundlinienpixel fallen zu lassen und damit der y-Wert der x-Höhe dem X-Höhen-Pixel entspricht.
- Bestimmte Abmessungen in einem Design sollten bei der Skalierung gleich (in Bezug aufeinander) bleiben. Durch Abrundfehler gehen jedoch solche Abmessungsbeziehungen oft verloren. Deshalb wird ein Verfahren zur Abmessungssteuerung beim Skalieren zur Verfügung gestellt.
- Abmessungen entstehen im allgemeinen durch Verbinden von Paaren von VERBUNDENEN SKELETTPUNKTEN und "Messen" der Anzahl von Ausgabegerätepixeln zwischen ihnen. Bei dieser Art darf die Abmessung, wie notwendig, auf- oder abgerundet werden (d. h. durch die optimale Anzahl von Pixeln dargestellt werden). Bestimmte Schlüsselzeichenabmessungen müssen jedoch zusätzlich gesteuert werden, um visuelle Übereinstimmung mit anderen Schlüsselzeichenformen, wie beispielsweise Grundstrichen, Dickten, Serifen, etc., zu garantieren. Diese Übereinstimmung kann innerhalb eines Zeichens oder von einem Zeichen zum anderen bestehen. Sie wird erreicht durch Verbinden von Paaren von VERBUNDENEN SKELETTPUNKTEN und zusätzliches Spezifizieren einer STEUER-ABMESSUNG, durch die sie verbunden sind. Beispielsweise wird ein die linke Seite eines Zeichengrundstrichs definierender SKELETT-Punkt mit dem VERBUNDENEN SKELETT-Punkt auf der rechten Seite des Grundstrichs verbunden und dann wird die Entfernung zwischen diesen beiden SKELETT-Punkten zum Skalierzeitpunkt durch die für alle Grundstriche der Schriftart festgelegte STEUER-ABMESSUNG definiert.
- Da oft subtile Unregelmäßigkeiten in Zeichen angelegt werden, um sie optisch "korrekt" erscheinen zu lassen, wenn sie auf hochauflösenden Geräten ausgegeben werden, wird ein Verfahren zur Verfügung gestellt, bei dem STEUER-ABMESSUNGEN "abgeschaltet" werden, wenn die Auflösung ausreichend ist, um Abmessungsveränderungen korrekt darzustellen. Diese Technik wird als die "1-1/4-PIXEL-ABSCHALTUNG" bezeichnet.
- STEUER-ABMESSUNGEN werden durch Konvertierung von Messungen, die an der Zeichenumrißbeschreibung durchgeführt wurden, in die zur besten Darstellung jener Abmessung erforderlichen Anzahl von Ausgabepixeln festgelegt. Da kleine Veränderungen in definierten Abmessungen jedoch in großen Veränderungen in den Pixeldarstellungen resultieren können (aufgrund von Abrundfehlern), müssen einige STEUER-ABMESSUNGEN eingestellt werden. Aus diesem Grund wird ein System zur Verfügung gestellt, bei dem eine STEUER-ABMESSUNG als STANDARD festgelegt wird und alle anderen aufgrund ihrer Abweichung von dem STAN- DARD festgelegt sind. Auf diese Art und Weise beeinflußt der STANDARD die Gesamt-"Schwärze und Strichstärke" des Ausgangsdesigns und "Schwärze und Strichstärke" bleiben in der Schrift konstant.
- Nicht alle Zeichenabmessungen können während der Skalierung gesteuert werden. Einige müssen sich verändern dürfen, damit andere beibehalten werden können. Wenn beispielsweise die beiden Grundstriche und die Gesamtdickte eines kleinen "n" gestaucht werden, muß die Bunze des Zeichens von ihrem originalen Design abweichen dürfen. Ansonsten entsteht ein unlösbarer Konflikt. Es ist jedoch am besten, Kompromisse bei der Steuerung der Zeichenabmessungen durch teilweises Stauchen bestimmter Abmessungen einzugehen. Dies wird bestimmt durch die ANORDNUNG von gekoppelten oder VERBUNDENEN SKELETT-Punkten. Daher, wie in dem Abschnitt zur DATENBESCHREIBUNG angegeben, ist die Reihenfolge, in der die SKELETT-Verarbeitung stattfindet, wichtig und wird deshalb von Designern definiert.
- Kursivschriften stellen eine besondere "Herausforderung" dar. Die Konzeptionen der GITTERAUSRICHTUNG und STEUER-ABMESSUNGEN können nicht strikt auf eine Kursivschrift angewendet werden, der Grund dafür ist, daß diese Konzeptionen von der lokalen Skalierung eines Umrißsegments zwischen SKELETT-Punkten abhängen, um Ausrichtung und Steuerung zu ermöglichen. Diese lokale Skalierung kann den Neigungswinkel von Zeichen zu Zeichen und sogar innerhalb eines Zeichens verändern und dabei optisch störende Ergebnisse hervorrufen.
- Deshalb wird bei kursiven Schriftarten eine besondere Herangehensweise gewählt. Diese Herangehensweise umfaßt alle oben dargestellten Konzeptionen, jedoch mit weniger Steuerungen. Außerdem muß das kursive Zeichen in einem Schritt während der Verarbeitung wieder steil gestellt werden, wie oben verarbeitet werden, und dann wieder kursiv dargestellt werden. Das Ergebnis ist, daß Neigungswinkel erhalten bleiben, Schlüsselumrißpunkte am Gitter ausgerichtet werden und bestimmte Abmessungen gesteuert werden. Einige benachbarte Strichlängen sind jedoch nicht optimal und erzeugen dabei ungewollte "Abflachungen" und "Hurenkinder"-Pixel.
- Die Grundlage für erfolgreiches Skalieren gemäß der vorliegenden Erfindung besteht im korrekten Definieren der Daten. Diese Daten bestehen aus zwei größeren Teilen: (1) dem Zeichenumriß (oder einer Reihe von Umrissen), der die Zeichenform definiert, und (2) der "Intelligenz", welche die Skalierung des Zeichenumrisses (der Zeichenumrisse) bestimmt. Beispieldaten werden weiter unten angegeben.
- Der Zeichenumriß kann auf beliebig viele Arten beschrieben werden, so lange jeder Umriß kontinuierlich und geschlossen ist (d. h. das Umrißende muß mit dem Umrißanfang zusammenfallen) . Zur Speicherung der Zeichenumrisse in dem Beispiel wurde eine Vektor/Spline-Punkt-Darstellung gewählt. Diese Darstellung ist praktisch auflösungsunabhängig, ermöglicht die Erzeugung von Vektorumrißlinien in einer für eine bestimmte Anwendung geeigneten Ausführlichkeit.
- Die Endqualität des für ein Ausgabegerät geringer Auflösung erzeugten Punktrasters hängt von der Qualität der Umrißbeschreibung ab.
- Die folgenden Datenfelder sind die gegenwärtig für die Beschreibung von Zeichenumrissen genutzten.
- COMMON/CHRIN/:
- XIN(256), YIN(256) = Liste der den Zeichenumriß vor der Skalierung beschreibenden Koordinaten
- NUMI = Anzahl der Koordinaten in der Liste (gegenwärtig maximal = 256)
- IPEN(256) = Y-Klasse-Zuordnungen für XIN, YIN- Koordinaten
- COMMON/CHROU/:
- XOU(256), YOU(256) = Liste der den Zeichenumriß nach der Ausrichtung am Ausgangsgitter beschreibenden Koordinaten
- Die SKELETT-Daten liefern die "Intelligenz" für das Skalieren. Sie können in verschiedene Kategorien eingeteilt werden, von denen eine jede eine oder mehrere der oben vorgestellten Konzeptionen unterstützt.
- a) Skelettpunkte: Die Grundlage für den Prozeß der Erfindung bilden die "Skelettpunkte". Diese Punkte sind eine Untergruppe der zur Beschreibung des Zeichenumrisses genutzten Koordinaten und werden aus der Koordinatenliste ausgewählt, weil diese Punkte gesteuerte Ausrichtung an dem Ausgangspunktrastergitter erfordern. Skelettpunkte sind meistens extreme x-Werte oder extreme y-Werte. Es gibt sie in zwei Gruppen: x-Skelettpunkte zum Steuern von X- Koordinaten und y-Skelettpunkte zum Steuern von Y-Koordinaten.
- b) Verbundene Skelettpunkte: "Verbundene Punkte" beinhalten eine Untergruppe von allen Skelettpunkten. Tatsächlich sind die meisten Skelettpunkte verbundene Skelettpunkte aufgrund der "baumartigen" Kopplung der Skelettpunkte durch ihre Verbindungen. Die Verbindung existiert nur in einer Richtung (in Richtung der "Äste"), d. h., wenn Skelettpunkte verändert werden, werden deren verbundene Punkte auch verändert. Wenn der verbundene Punkt zusätzlich verändert wird, hat das keinen Einfluß auf seinen Partner (in Richtung der "Wurzel"). Allgemein kann man sagen, daß ein Skelettpunkt mehr als einen damit verbundenen Punkt haben kann, jedoch kein verbundener Punkt kann ein verbundener Punkt in zwei Wurzelsystemen sein.
- Aus diesem Grund ist es notwendig, wenn in speziellen Situationen die Notwendigkeit besteht, daß zwei getrennte Wurzeln in demselben verbundenen Punkt "konvergieren", automatisch ein Duplikat des Punkts einzusetzen. Auf diese Art und Weise wird der genannte Punkt zu zwei getrennten Punkten, von denen eine jeder seine eigene Wurzel hat.
- c) Ausrichtungsattribut: Nicht alle Skelettpunkte sind zur Ausrichtung an dem Gitter vorgesehen. Nichtausrichtung gestattet die Beibehaltung der Winkel und der Strichstärke größerer diagonaler Zeichenstriche. Außerdem gestattet sie die Zuordnung von Skelettpunkten einfach zur Begrenzung von Skaliersegmenten entlang dem Zeichenumriß. Deshalb hat jeder Skelettpunkt einen Ausrichtungsattributschalter, welcher "an"- oder "aus" -geschaltet wird.
- d) X- und Y-Abmessungen: Jede Verbindung zwischen einem Skelettpunkt und einem damit verbundenen Skelettpunkt erfolgt über eine festgelegte Abmessung, entweder die NULL- ABMESSUNG (im Falle derer die Ausgabeabmessung in Pixeln tatsächlich direkt von der eingegebenen Umrißabmessung durch Abrunden bestimmt wird) oder eine spezifische Abmessung, welche aus einer vorher festgelegten X- oder Y- ABMESSUNGS-Liste ausgewählt wird. Hierbei sollte beachtet werden, daß die X- und Y-ABMESSUNGS-Liste in Eingabeeinheiten gemessene Abmessungen umfaßt (d. h. solche, die zur Definition des Zeichenumrisses genutzt wurden) . Zum Skalierzeitpunkt werden diese Abmessungen so konvertiert, daß sie Abmessungen in Bezug auf die Gitterpixelabmessung darstellen.
- X- und Y-Abmessungen existieren entweder als GLOBALABMES- SUNGEN, wo die spezifizierten Abmessungen durch die gesamte Schriftart verwendet werden, oder als LOKALABMES- SUNGEN, wo die spezifizierten Abmessungen nur in einem spezifischen Zeichen verwendet werden. GLOBALABMESSUNGEN werden mit der Schrift gespeichert, LOKALABMESSUNGEN werden mit jedem Zeichen gespeichert.
- e) Y-Klassifikation: Jede zur Beschreibung des Zeichenumrisses benutzte Koordinate ist mit einem "Band" gekoppelt, welches horizontal durch eine Textzeile verläuft. Y-KLAS- SIFIKATIONS-Daten bestehen aus zwei Teilen: (1) der Y- KLASSE- oder "Band" -Definition und (2) aus der Koordinaten-ZUORDNUNG. Eine Y-KLASSE wird durch zwei y-Werte definiert, einen-oben und einen unten. Beispielsweise wird die Y-KLASSE für alle Kleinbuchstaben durch den y-Wert der Grundlinie und den y-Wert der Kleinbuchstabenhöhe definiert. Alle Umrißkoordinaten, die in Bezug auf diese beiden y-Werte angeordnet werden müssen, sind deshalb mit dieser Y-KLASSE verbunden oder ihr zugeordnet. Gleichzeitig kann jedoch im gleichen Zeichen die zusätzliche Forderung nach Ausrichtung der Unterlänge des Zeichens bestehen. Das "Band" zwischen Grundlinie und der Unterkante der Unterlänge wird als eine Y-KLASSE definiert und jede die Unterlänge beschreibende Koordinate entlang dem Umriß wird jener Y-KLASSE ZUGEORDNET.
- Wie im Falle der X- und Y-ABMESSUNGEN wird die Y-KLASSEN- Definition in Eingabeeinheiten festgelegt und dann zum Skalierzeitpunkt in Ausgangspixel konvertiert.
- f) Neigungswinkel: Aus Gründen der speziellen Verarbeitung von kursiven Schriftarten wird der Winkel jeden Zeichens mit den Zeichenskelettdaten gespeichert. Dieser Winkel wird genutzt, um das Zeichen während der Verarbeitung aller Y-Koordinaten "steil zu stellen" und dabei jede Veränderung des Winkels in der Endausgabe zu verhindern.
- Außerdem wird der Hauptneigungswinkel der Schrift global für die gesamte Schriftart gespeichert. Dieser Winkel wird verwendet, um jedes Zeichen nach der Y-Verarbeitung "wieder kursiv darzustellen". Auf diese Art und Weise werden geringe Variationen in Winkeln, welche jedes Zeichen aus optischen Gründen aufweist, bei geringer Auflösung beseitigt.
- g) Verarbeitungsfolge: Die Reihenfolge, in der SKELETT-Punkte verarbeitet werden, ist listenabhängig. Die Reihenfolge in der Liste muß sorgfältig festgelegt werden, so daß die Position der wichtigsten Punkte entlang des Umrisses zuerst festgelegt wird. Erst dann können weniger wichtige Punkte festgelegt werden. Dabei wird auffallen, daß die Wahl der wichtigsten Punkte entlang des Umrisses (und deshalb die Reihenfolge in der Liste) eine Frage der Designwahl ist.
- Es folgt eine Definition der Datenvariablen, die gegenwärtig für die "Skalierungsintelligenz" genutzt werden.
- COMMON/PARAM/:
- XPIX, YPIX = X- und Y-Pixelabmessung (Entfernung zwischen Gitterlinien), wie in den eingegebenen Zeichenumrißkoordinateneinheiten gemessen. Diese werden zum Skalierzeitpunkt auf der Grundlage von Schriftgröße und Auflösung der Ausgabe- und Masterdaten berechnet.
- COMMON/SKEL/:
- NLOOP = Anzahl der geschlossenen Schleifenumrisse in diesem Zeichen.
- LPEND(20) = Die Indizes der letzten XIN, YIN-Koordinaten in jedem geschlossenen Schleifenumriß enthaltende Matrix.
- NCLASS = Anzahl der Y-Klassen oder horizontalen "Bänder" im Zeichen.
- ICLS (10, 2) = Y-Klassen-Definition. (N,1) = unteres Ende des Y-Klassen-"Bandes".
- = (N,2) = oberes Ende des Y-Klassen-"Bandes".
- NUMS = Anzahl der Skelettpunkte (maximal = 96).
- ISK(96,10) = Skelettmatrix mit Indizes zu Skelettkoordinaten, Verbindungen, Abmessungen, etc.
- (N,1) = Index zu skelettpunktdefinierender XIN, YIN-Koordinatenmatrix. Positiver Indexwert steht für "Gitterausrichtung".
- (N,2) = Anzahl der mit diesem Skelettpunkt verbundenen Skelettpunkte.
- (N,3) = 1 bei X-Skelettpunkt, 2 bei Y-Skelettpunkt.
- (N,4) = Indizes verbundener Skelettpunkte, kombiniert mit Zeigern auf X- oder Y-gesteuerte Abmessungen (weitere Beschreibung in ASSOCY.FTN).
- (N, 10)
- IXDIM(32) = Gesteuerte Abmessung für X, angezeigt durch verbundene Skelettpunkte.
- IYDIM(32) = s. o. für Y.
- COMMON/ITALIC/:
- ANGIT = Neigungswinkel für dieses Zeichen.
- GLANGT = Globaler Neigungswinkel (Durchschnitt für gesamte Schrift).
- Im folgenden wird eine Reihenfolge der Schritte angegeben, welche notwendig sind, um den Zeichenumriß für eine spezifische Schriftgröße/Auflösung einzustellen, bevor der Umriß mit "Bits" "gefüllt" wird.
- Die Schriftgrößen und Auflösungen sowohl der eingegebenen Zeichenumrißdaten als auch der Ausgabe-"Punktraster"-Daten werden zur Berechnung der X- und Y-Abmessungen der Pixel für das "Punktraster"-Gitter verwendet. Details dieser Umwandlung werden weiter unten unter INPNCS.FTN dargestellt.
- Sowohl ZEICHENUMRISS- als auch SKELETT-Daten werden in den Speicher geladen. Details zu den internen Datenformaten werden weiter unten unter LOADCH.FTN und LOADSK.FTN dargestellt.
- Wenn ein Zeichen als kursiv klassifiziert wird (durch Vorhandensein eines Winkels, der nicht Null ist), so muß es steil gestellt werden, bevor irgendeine Verarbeitung erfolgt, welche nach seinem festgelegten Winkel beginnen könnte. Details werden weiter unten unter UNITAL.FTN dargestellt.
- Definierte Segmente in dem Zeichenumriß werden einzeln skaliert, um Ausrichtung und korrekte interne Proportionen innerhalb einer spezifizierten Y-Klasse zu erhalten. Details werden in LPSCAL.FTN dargestellt.
- Festgelegte Global- und Lokalabmessungen werden in Eingabedateneinheiten (zur Beschreibung des Zeichenumrisses genutzten Einheiten) definiert. Eine jede muß auf der Grundlage der Pixelabmessung, wie in INPNCS.FTN festgelegt, in Ausgangspixel konvertiert werden. Eine detailliertere Erklärung wird weiter unten unter DIMPIX.FTN gegeben.
- Y-Skelettpunkte werden zur Ausrichtung oder Nichtausrichtung an dem Gitter verarbeitet, wie durch den AUSRICHTUNGSATTRIBUT- KNOPF angegeben. Da jeder einzelne Skelettpunkt hoch oder herunter verschoben wird, werden die damit verbundenen Skelettpunkte um den gleichen Betrag verschoben. Dieser Prozeß wird solange fortgesetzt, bis die Liste der Y-Skelettpunkte ausgeschöpft ist. Details werden weiter unten in GRYAJ.FTN/GRXAJ.FTN und ASSOCY.FTN/ASSOCX.FTN dargestellt.
- Da Skelettpunkte eine Untergruppe der den Zeichenumriß definierenden Koordinaten sind, dienen sie der Markierung der Enden der Segmente entlang dem Zeichenumriß. Diese Segmente müssen "gedehnt" oder "zusammengepreßt" werden, damit die Skelettpunkte an dem Gitter entsprechend ausgerichtet werden können, während ein glatter und ästhetischer Umriß erhalten werden muß. Dies wird erreicht durch die lineare Skalierung von Y-Segmenten in zwei verschiedenen Prozessen. Details werden in XPROC.FTN/YPROC.FTN dargestellt.
- Wenn angebracht, wird das Zeichen wieder kursiv dargestellt.
- Details werden weiter unten in ITALIC.FTN dargestellt.
- Nach der Kursivdarstellung (wenn angebracht) werden X-Skelettpunkte zur Ausrichtung oder Nichtausrichtung an dem Gitter verarbeitet, wie durch den AUSRICHTUNGSATTRIBUTKNOPF angegeben. Da jeder einzelne Skelettpunkt nach links oder rechts verschoben wird, werden die damit VERBUNDENEN Skelettpunkte um den gleichen Betrag verschoben. Dieser Prozeß wird solange fortgesetzt, bis die Liste der X-Skelettpunkte ausgeschöpft ist. Details werden weiter unten in GRXAJ.FTN/GRAJ.FTN und ASSOCX.FTN/ASSOCY.FTN dargestellt.
- Da Skelettpunkte eine Untergruppe der den Zeichenumriß definierenden Koordinaten sind, dienen sie der Markierung der Enden der Segmente entlang dem Zeichenumriß. Diese Segmente müssen "gedehnt" oder "zusammengepreßt" werden, damit die Skelettpunkte an dem Gitter entsprechend ausgerichtet werden können, während ein glatter und ästhetischer Umriß erhalten werden muß. Dies wird erreicht durch die lineare Skalierung von X-Segmenten in zwei verschiedenen Prozessen. Details werden in XPROC.FTN und YPROC.FTN dargestellt.
- Der Schlüssel zur Erzeugung von benachbarten Strich "verläufen" optimaler Länge in dem resultierenden "Punktraster"-Zeichen ist die "richtige" Ausrichtung der X- und Y-Skelettpunkte an dem Gitter. Ein Y-Skelettpunkt ist richtig ausgerichtet, wenn sein Y-Wert ganzzahlig durch die Y-Pixel-Abmessung teilbar ist. Ein X-Skelettpunkt ist richtig ausgerichtet, wenn sein X- Wert minus die Hälfte der X-Pixel-Abmessung ganzzahlig durch die X-Pixel-Abmessung teilbar ist. Zur Vereinfachung der Verarbeitung wird ein X-Skelettpunkt als richtig ausgerichtet betrachtet, wenn sein X-Wert ganzzahlig durch die X-Pixel-Abmessung teilbar ist. An diesem Punkt der Verarbeitung ist es deshalb notwendig, alle X-Werte durch Addition einer Hälfte der X-Pixel-Abmessung zu verschieben. Details werden weiter unten in NCSBLO.FTN dargestellt.
- An diesem Punkt wurde der Zeichenumriß bearbeitet, um eine Umrißdefinition des Zeichens zu erzeugen, welche, wenn mit "Bits" ausgefüllt, eine gute Annäherung jenes Zeichens liefert. Die FÜLL-Technik besteht im wesentlichen darin, jeden Vektor, in Folge, entlang dem neu festgelegten Umriß zu verarbeiten, dabei nach allen Schnittpunkten von Vektoren mit X- Gitterlinien suchend. Die resultierenden Schnittpunkte sind STRICHÜBERGÄNGE, d. h., Stellen, an denen die Bitpolarität für jenes und folgende Bits in jenem Strich umzukehren ist. Bei Beendigung dieses Prozesses hat man eine Sammlung von vertikalen Zeichenstrichen, von denen ein jeder eine unsortierte Liste von Y-Pixeln (ÜBERGÄNGEN) enthält. Nach Sortierung können alle ungeradzahligen Übergänge als Anfänge von "ON"- Strichverläufen betrachtet werden und alle ganzzahligen Übergänge können als die Anfänge von "OFF"-Strichverläufen betrachtet werden.
- Nach der detaillierten Beschreibung der Theorie und Terminologie des Verfahrens der Erfindung soll das Verfahren nun auf eine spezifische Anwendung, nämlich die Bearbeitung eines beispielhaften Buchstabens "k", wie in Fign. 1 bis 9 dargestellt, angewendet werden. Die Figuren wurden in ein Gittermuster von 1/4'' · 1/4'' gezeichnet und sind zur Verwendung als Auflagen aufeinander vorgesehen. Ein Teil des gesamten Gittermusters wird in jeder Figur angegeben, so daß die Auflagen der Figur, die darunter liegen soll, zugeordnet werden können.
- Mit Bezug auf die Zeichnungen wird das originale Zeichen (Buchstabe "k") in Fig. 1 gezeigt und durch eine Gruppe von X/Y-Koordinatenpaaren definiert, welche in Reihenfolge um das Zeichen herum angeordnet sind. Die X/Y-Paare werden durch Knoten angegeben, welche durch die Referenzzahl 20 entlang dem Zeichenumriß in Fig. 1 angezeigt werden.
- Y-Werte spezifischer Punkte entlang dem Umriß liegen auf oder dicht neben Schlüssel-Y-Linien (d. h. Zeichenteilen, welche von einem Zeichen in einer Schrift zum anderen vertikal ausgerichtet sein müssen). Dieses Beispiel zeigt die Y-LINIEN: GRU- NDLINIE, X-Höhe und Oberlängenhöhe (welche parallel zu der X- Achse verlaufen).
- Fig. 2 zeigt die Bearbeitung des gesamten Zeichens, um die absoluten Positionen der Y-Linien in Übereinstimmung in Bezug auf ein ganzzahliges Ausgangspixel oder eine X-Achsen-Gitter- Linie zu bringen. Koordinaten, welche sich nicht genau auf den festgelegten Y-Linien sich befinden, werden durch lineares Skalieren versetzt, wie durch deren zugeordnete Y-Klasse bestimmt. Eine Y-Klasse ist durch irgendeine Kombination zweier festgelegter Y-LINIEN definiert.
- In Fig. 2 wurde die Zeichengrundlinie auf die nächstgelegene X-Achsen-Gitter-Linie nach unten gerundet, was wiederum das gesamte Zeichen nach unten verschiebt. Dann werden die X-Höhe und Oberlängen-Höhe auf die nächstgelegenen X-Achsen-Gitter- Linien gerundet. Alle Punkte werden, wie durch die angegebenen Y-Klassen (A oder B) bestimmt, skaliert.
- Das Ergebnis dieser Bearbeitungen kann durch Vergleich der relativen Positionen der mit A bezeichneten Knoten in Fig. 1 mit denen in Fig. 2 gesehen werden. Es ist anzumerken, daß alle für die Zeichenteile in x-Höhe signifikanten Knoten verschoben wurden, um die Knoten auf oder in der Nähe der Grundlinie und x-Höhe mit der als das Grundlinienpixel oder x-Höhen-Pixel bezeichneten Gitterlinie zusammenfallen zu lassen oder fast zusammenfallen zu lassen. Es sollte auffallen, daß Knoten nicht notwendigerweise sich physisch zwischen den die Y-Klasse definierenden Y-Linien befinden müssen, wie in Fig. 2, Knoten B1 und B2, ersichtlich.
- Fig. 3 stellt die Bearbeitung des Zeichenumrisses dar, um eine optimale Übertragung auf ein Punktraster durch Anwendung und Verarbeitung der Skelettinformationen zu erzeugen. Diese Informationen definieren Schlüssel-SKELETT-Punkte, welche verschoben werden müssen, um eine spezifische Beziehung zu dem Ausgangsgitter einzugehen, zusammen mit einer definierten Struktur von gekoppelten oder VERBUNDENEN Punkten, deren Positionen nach Verarbeitung ein Ergebnis von Verschiebungen in Richtung des damit verbundenen SKELETT-Punktes und deren eigener relativer Position zu dem Gitter sind.
- Wenn die Einheitlichkeit spezifischer Abmessungen wichtig ist, von Zeichen zu Zeichen oder sogar innerhalb eines Zeichens, werden STEUERABMESSUNGEN aus einer festgelegten Tabelle ausgewählt, um jede mit den aktuellen Daten eingeführte Veränderung aufzuheben. Zu beachten ist, daß an diesem Punkt das einzige Bestreben in Verarbeitung in Richtung der X-Achse besteht.
- In dem Beispiel von Fig. 3 wird Skelettpunkt #1 zuerst, wie durch das geviertelte Symbol angezeigt, am Gitter ausgerichtet. Die Baumstruktur der SKELETT-Daten legt fest, daß jede Verschiebung von SKELETT-Punkt #1 auf die damit VERBUNDENEN Punkte #2, #3 und #4 zutrifft. Die SKELETT-Punkte werden durch Kreise angegeben, welche Pfeile haben, die aus dem Kreis heraus, jedoch nicht hinein führen, während VERBUNDENE Punkte Pfeile aufweisen, welche in den Kreis führen. Am Gitter ausgerichtete Punkte werden durch das geviertelte Symbol dargestellt, während nicht am Gitter ausgerichtete Punkte durch den nicht ausgefüllten Kreis dargestellt werden. Mit Bezug auf die VERBUNDENEN Punkte besteht die Wahl, (1) jeden dieser Punkte zu erschieben und danach am Gitter auszurichten, (2) sie einfach zu verschieben und nicht am Gitter auszurichten oder (3) sie eine spezifische Entfernung von Punkt #1, wie durch das Vorhandensein eines STEUERABMESSUNG angegeben, zu bewegen.
- Punkte #2 und #3 werden verarbeitet, ihre Äste enden jedoch. Von Punkt #4 verzweigen sich jedoch zusätzliche VERBINDUNGEN, so daß, nach Verarbeitung von Punkt #4, weitere Verschiebungen und Ausrichtungen, wie in dem Diagramm angegeben, ausgeführt werden. Es ist zu beachten, daß ABMESSUNG G verwendet wird, um die Entfernung zwischen Punkt #1 und Punkten #2 und #3 sowie zwischen Punkt #4 und Punkt #5 zu steuern, um einheitliche Seriflängen zu garantieren. ABMESSUNG F wird verwendet, um die Entfernung zwischen Punkt #1 und Punkt #4 zu steuern, um einheitliche Grundstrichbreiten von Zeichen zu Zeichen zu garantieren.
- Es sollte auch beachtet werden, daß Punkt #10 nicht am Gitter ausgerichtet wird, sondern, wie durch die Bearbeitung von Punkten #7 und #9 bestimmt, verschoben wird. Dies garantiert, daß die diagonalen Umrisse zwischen #7 und #10 und zwischen #9 und #10 sich in Bezug auf den Winkel nicht verändern. Wenn alle solchen Winkel diagonaler Umrisse unverändert bleiben, dann bleibt auch das Verhältnis von einer Grundstrichseite zur anderen unverändert, und dabei wird eine mögliche unerwünschte (kegelige) Verjüngung der Zeichenstriche vermieden.
- Der offensichtliche Konflikt des Konvergierens zweier SKELETT- Punkte an demselben VERBUNDENEN Punkt und der möglichen Verschiebung desselben Punktes in zwei Richtungen wird durch die Regeln, welche diese KONVERGENZ bestimmen, gelöst. Zum einen können nicht mehr als zwei SKELETT-Punkte an einem VERBUNDENEN Punkt konvergieren und zum zweiten wird eine zweite Umrißkoordinate in die Umrißkoordinatenliste an der gleichen Stelle aufgenommen.
- Unter Bezug auf Fig. 4 werden, nachdem die SKELETT- und damit VERBUNDENEN Punkte entsprechend verschoben und am Gitter ausgerichtet oder nicht am Gitter ausgerichtet wurden, alle anderen Punkte entlang dem Umriß durch Verschieben und lineares Skalieren repositioniert, um einen geglätteten Umriß zu erhalten. Es ist dabei zu beachten, daß die Punkte #10 und #15 und #6 nicht nur durch die Punkte #10A und #10B, #15A und #15B bzw. #6A und #6B ersetzt wurden, um den KONVERGENZ-Konflikt zu lösen, sondern daß sie auch entsprechend verschoben wurden, um die diagonalen Winkel beizubehalten. Das in Fig. 4 gezeigte, resultierende Zeichen zeigt das Zeichen, nachdem es nur auf das Gitter entlang der X-Achse eingestellt wurde.
- Die REIHENFOLGE der Verbindungen von SKELETT-Punkten ist wichtig für die Endlösung. Wie in dem Ablaufdiagramm in Fig. 5 dargestellt, ist der vertikale Grundstrich des "k" die erste festzulegende Zeichenabmessung, es folgt die Länge des Serifs und die Entfernung von der rechten Seite des Grundstrichs und dem am weitesten rechts gelegenen Punkt des Zeichens. Deshalb wird die Gesamtbreite des Zeichens von dem Serif, dem Grundstrich und der Diagonalen abhängig. Alle anderen Abmessungen hängen dann von denjenigen Abmessungen ab, welche vorher festgelegt wurden.
- Fig. 6 zeigt die durch Nichtausrichtung am Gitter festgelegte Reihenfolge der Zeichenabmessungen. Wiederum ist diese Figur zur Verwendung als Auflage auf Fig. 4 vorgesehen.
- Fig. 7 stellt die Bearbeitung der Zeichenumrisse entlang der X-Achse dar. Fig. 8 zeigt die Ergebnisse der Bearbeitung entlang der X-Achse von Fig. 7.
- Fig. 9 zeigt die Reihenfolge von Verbindungen auf der Y-Achse. Dabei sollte auffallen, daß die Verbindungen auf der Y-Achse dazu neigen, weniger abhängig zu sein. Die Serifhöhe wird auf demselben Niveau gesteuert, d. h., jeder Serif beginnt eine neue Wurzel und wird nicht durch vorher verarbeitete Serifhöhen verändert. Außerdem ist wiederum zu beachten, daß die Diagonalen behandelt werden, um den Winkel der Diagonale beizubehalten.
- An diesem Punkt sollte beachtet werden, daß die Fign. 1 bis 9 Verarbeitung entlang der Y-Linie, dann Bearbeitung des Zeichens entlang der X-Achse und danach Bearbeitung entlang der Y-Achse zeigen. Im Gegensatz dazu stellte der oben erörterte Theorieteil den umgekehrten Betriebsablauf dar, d. h. erst Bearbeitung entlang der Y-Achse und dann entlang der X-Achse nach der anfänglichen Verarbeitung entlang der Y-Linie. Jede der Reihenfolgen kann bei Anwendung des Verfahrens der Erfindung auf nichtkursive Zeichen genutzt werden. Außerdem kann bei nichtkursiven Zeichen die Reihenfolge der Bearbeitung entlang der X-Achse, dann entlang den Y-Linien und danach der Verarbeitung entlang der Y-Achse verwendet werden.
- Bei kursiven Zeichen kann nur eine Verarbeitungsreihenfolge angewendet werden, nämlich die der Verarbeitung entlang der Y- Linie, entlang der Y-Achse und dann entlang der X-Achse. Dabei ist zu beachten, daß sowohl bei kursiven wie bei nichtkursiven Zeichen die Verarbeitung entlang der Y-Linie vor der entlang der Y-Achse erfolgen muß.
- Der FORTRAN-Quellcode zur Anwendung des Verfahrens der Erfindung wird im folgenden dargelegt.
- Es folgt die Hauptanleitung zur Verarbeitung einzelner Zeichen. Zwei Programmroutinen werden auf die vollständige SKE- LETT-Punkt-Matrix (ISK) angewendet: die erste Routine lokalisiert und verarbeitet alle y-SKELETT-Referenzen, während die zweite Routine alle X-SKELETT-Referenzen lokalisiert und verarbeitet. Diese Herangehensweise eliminiert die Notwendigkeit, SKELETT-Daten in einer definierten Reihenfolge (bezüglich der X- und Y-Datenlisten) darzustellen, garantiert jedoch noch, daß Daten für kursive Schriftarten richtig verarbeitet werden.
- Anmerkung: Es wird Bezug genommen auf Routinen zum Holen und Speichern von Umrißdaten aus bzw. in den (XIN,YIN)- und (XOU,YOU)-Matrizen. Diese sind FCHIXY, STIRXY, STIRX und STIRY für (XIN,YIN) und FCHOXY, STORXY, STORX und STORY für (XOU,YOU).
- "An diesem Punkt beginnt die aktuelle Verarbeitungsschleife mit dem IXYSW-Schaltsatz für "Y""
- Wenn die Verarbeitung der SKELETT-Punkte abgeschlossen ist, werden Indizes positiv gesetzt, um alle zukünftigen Referenzen direkter zu machen. In YPROC und XPROC werden die zwischen SKELETT-Punkten gelegenen Umrisse "gestreckt" und "zusammengepreßt", um geglättete skalierte Zeichen zu erzeugen.
- Da X-SKELETT-Punkte tatsächlich zwischen Gitterlinien ausgerichtet sein müssen, wird die Liste mit X-SKELETT-Punkten nach dem minimalen X-Wert abgesucht. Dieser Wert wird verwendet, um die Verschiebung für alle X-Werte zu berechnen, um ausgerichtete X-SKELETT-Punkte zwischen die Gitterlinien zu bringen.
- Wirkliches Skalieren des Zeichens für eine spezifische Schriftgröße und/oder Auflösung wird durch Skalieren des "Bit- Gitters" erreicht als vielmehr durch Skalieren des Zeichenumrisses. Das heißt, daß eine geringere Auflösung oder kleinere Schriftgröße durch Verwendung größerer Abstände zwischen X- und Y-Gitterlinien erzeugt wird.
- Zu diesem Zweck muß ein Verfahren zur Steuerung der Gitterabstände (Ausgabegerät-Pixelgröße) bereitgestellt werden. Dabei sollte beachtet werden, daß es zwei verschiedene Pixelsysteme gibt: das des Ausgabegerätes (z. B. 300 Pixel/Inch bei einem Canon-Laserdrucker, Modell LBP-CX) und das der eingegebenen Daten (z. B. 1302 Pixel/Inch mal 1563 Pixel/Inch bei den Compugraphic-Setzmaschinen vom Modell 8600/8400).
- Deshalb wird die folgende Formel verwendet, um die Gitterabstände (Ausgangspixelabmessung), wie in Dateneinheiten (eingegebenen Pixeln) gemessen, zu bestimmen:
- XPIX = (INPTX * INRESX) / (OUPTX * OURESX)
- und
- YPIX = (INPTY * INRESY) / (OUPTY * OURESY)
- mit:
- XPIX = horizontale Pixelabmessung für "Bit-Gitter"
- INPTX = eingegebene Schriftgröße (64 Punkte 8600 Master)
- INRESX = eingegebene horizontale Auflösung (1302 Pixel/Inch)
- OUPTX = Ausgabeschriftgröße
- OURESX = horizontale Ausgabeauflösung
- YPIX = vertikale Pixelabmessung für "Bit-Gitter"
- INPTY = eingegebene Schriftgröße (64 Punkte 8600 Master)
- INRESY = eingegebene vertikale Auflösung (1563 Pixel/Inch)
- OUPTY = vertikale Ausgabeschriftgröße
- OURESY = Ausgabeauflösung
- Daten werden direkt in die entsprechenden SKELETT-Datenbereiche geladen.
- Eingabe:
- LUN = Anzahl an logischen Einheiten.
- SUBROUTINE LOADSK (LUN)
- Ein einzelnes Zeichen wird aus einem in einer vorangehenden Routine geöffneten Datei geladen. Die Verarbeitung von Koordinaten in Bezug auf ihre entsprechend zugeordneten Y-KLASSEN findet gegenwärtig statt, wenn der Zeichenumriß geladen wird. Relevante Kopf-Daten werden von dieser Routine auch zurückgesendet.
- Eingabe:
- LUN = Logische Einheit
- Ausgabe:
- ICH = Zeichenanzahl
- IL = linke Stützposition in Eingabeeinheiten
- IR = rechte Stützposition in Eingabeeinheiten
- B = Zeichengrundlinie - kann nicht signifikant sein, weil sie eine Konstante sein sollte (1536 für Daten von Compugraphic Modell 8600/8400)
- ID = reserviert
- IU = setzmaschineneinheitswert (Einheitsbreite)
- NREC = Breite in Eingabepixeln
- IMIN = reserviert
- IMAX = reserviert
- NUM = reserviert
- Jede Koordinate wird von der Platte gelesen, mit ihrer Sequenznummer (NU) und ihrer Y-KLASSIFIKATION (IPEN). IPEN gibt an, in welcher Y-Klasse (1-10) sich die Koordinate befindet. Der Wert von IPEN ist jedoch Null, wenn er verwendet wird, um den Beginn einer neuen geschlossenen Schleife anzuzeigen. (Dies ist redundant, weil die LPEND-Matrix in den SKE- LETT-Daten ebenfalls geschlossene Schleifen definiert.) Wenn IPEN nicht Null ist, wird die Koordinate zu LPSCAL zum "Schleifen-Skalieren" gesendet, um die Koordinaten für die Y- KLASSEN-Ausrichtung einzustellen.
- Wie oben erwähnt, muß jedes Zeichen vertikal innerhalb eines "Bandes" oder einer Reihe von "Bändern", welche horizontal durch die Textzeile verlaufen, ausgerichtet werden. Diese "Bänder" werden als Y-KLASSEN bezeichnet. Jede Y-KLASSE wird oben und unten durch ein Paar von einzelnen y-Werten definiert, welche aufgrund ihrer besonderen Bedeutung für alle Zeichen gleichmäßig auf eine Pixelgrenze (Gitterlinie) fallen müssen. Beabsichtigt ist die vertikale Steuerung jeden Teils eines Zeichenumrisses, dessen Position (relativ zu diesen y- Werten) die optische Ausrichtung von Text von Zeichen zu Zeichen beeinflußt. Größere y-Linien, wie beispielsweise die Grundlinie, Anfangsbuchstabenhöhe, das Unterlängenniveau, etc., legen im allgemeinen diese y-Werte fest. Umrisse, welche sich "zwischen" ihnen befinden, werden verschoben und skaliert, um die spezifizierten y-Werte am Gitter auszurichten.
- Es ist nicht erforderlich, daß sich alle Koordinaten, welche einen bestimmten Umriß definieren, tatsächlich innerhalb der Y-KLASSE zwischen den y-Werten befinden. Oft ragen kleine Segmente von Umrissen aus der Y-KLASSE heraus. Um jedoch glatte und ästhetische Umrisse zu erhalten, werden die herausragenden Segmente in der gleichen Art wie jene innerhalb der Y-KLASSE behandelt.
- Die folgende Routine wird verwendet, um eine einzelne Gruppe von Koordinaten entlang einem Zeichenumriß zu verarbeiten. Bei jedem Aufruf wird ein neuer Punkt (X,Y) auf der Grundlage seiner Y-KLASSE (IC), wie durch zwei y-Werte, ICLS(IC,1) und ICLAS(IC,2), definiert, verschoben und skaliert. Da aufeinanderfolgende Punkte entlang einem Umriß dazu neigen, in die gleiche Y-Klasse zu fallen, mit nur gelegentlichen Ausnahmen, müssen die Verschiebung und Skalierung nur berechnet werden, wenn ein Umriß von der letzten Y-KLASSE (ICLAST) in die aktuelle (IC) übergeht.
- Eingabe:
- IC = aktuelle Y-Klassen-Nummer
- X,Y = einzelne Koordinatengruppe
- ICLAST = letzte Y-Klassen-Nummer
- Ausgabe:
- ICLAST = aktualisierte Y-Klassen-Nummer
- X,Y = neue Koordinatenposition
- Anmerkung: Bei einer kursiven Schrift, bei der ein regelmäßiger Strichwinkel wichtig ist, muß das Zeichen vor jeder Verarbeitung, welche eine Y-Koordinate verändert, "steil gestellt werden".
- IF (ANGIT.NE.0.) CALL UNITAL (),Y) ! STRAIGHTEN ITALIC
- Anmerkung: Überspringen, wenn die y-KLASSEN-Verschiebung und der Skalierfaktor bereits für die aktuelle Y-KLASSE berechnet wurden.
- IF (IC.EQ.ICLAST) GO TO 100
- Um den VERSCHIEBE- und SKALIERFAKTOR zu berechnen, welcher gebraucht wird, um die Y-Werte, (ICLAS(IC,2)), an dem Gitter auszurichten, berechnen und verschieben wir einfach eine Verschiebung für die Grundlinie (Konstante 1536 in 8600/8400 Daten), um sie gleichmäßig mit einer Pixelgrenze (Gitterlinie) auszurichten. Auf diese Art werden die meisten Y-KLASSEN-Höhen genau von der Grundlinie gemessen. Als zweites werden die den die Y-KLASSE definierenden Y-Werten nächsten Gitterlinien bestimmt. Als drittes wird der zur Verteilung des Zeichenumrisses zwischen diesen zwei Gitterlinien erforderliche SKALIERFAKTOR berechnet.
- Schließlich wird die neue Y-Koordinate in dem Zeichenumriß bestimmt, indem zuerst die Y-KLASSE des Punkts (Y+ORIGIN-YBLINE) berechnet wird, er dann skaliert wird (*YSCAL) und schließlich zu der neuen Y-KLASSEN-Untergrenze (BLINE) hinzugefügt wird.
- Weil das visuelle Hauptmerkmal einer lateinischen Schrift im konstanten Rhythmus der vertikalen Grundstriche sowohl im Abstand wie in schwärze/Strichstärke besteht und weil die "vertikalen" Grundstriche einer kursiven Schrift überhaupt nicht vertikal sind, ist es notwendig, jedes Zeichen vor jedweder Y- Verarbeitung "steil zu stellen". Ein Auslassen dieses Schritts führt zu einer ungesteuerten Einstellung auf die Hauptneigungswinkel innerhalb ,des Zeichens. Eine Seite des Grundstrichs könnte in eine Richtung geneigt sein, während die andere Seite desselben Grundstrichs in die andere geneigt sein könnte, was in einem spitz zulaufenden Grundstrich endet.
- Wenn ein Zeichen steil gestellt ist, sollten seine Grundstriche ungefähr vertikal stehen. Die Einstellung der Y-Werte einer solchen Vertikale hat keinen Einfluß auf deren Winkel. Nach Beendigung aller Y-Einstellungen wird das Zeichen, wie in ITALIC.FTN beschrieben, wieder kursiv gestellt.
- Die folgende Routine wird benutzt, um eine Paar von Koordinaten "steil zu stellen". Die Herangehensweise ist technisch, die Daten durch Hinzufügen des Produktes aus dem Y-Wert und der Tangente des Neigungswinkels zu jedem x-Wert zu "entneigen".
- Eingabe:
- X,Y = Paar von Koordinatenwerten, welches einen einzelnen Umrißpunkt beschreibt.
- Verschiedene Herangehensweisen an die Umwandlung einer festgelegten X- oder Y-Abmessung, wie sie in den eingegebenen Daten definiert ist, in die entsprechende Anzahl von Pixeln, um jene Abmessung in den Ausgabedaten darzustellen, wurden ausprobiert. Die Methoden scheinen geräteabhängig zu sein, und vielleicht ist es an diesem Punkt der Verarbeitung sinnvoll, die Herangehensweise auf der Grundlage solcher Ausgabegerätecharakteristika wie Auflösung, "Punktschärfe", Fähigkeit des Gerätes, einen einzelnen Punkt zu halten, etc., zu differenzieren. Derzeit funktioniert die folgende Routine gut auf dem CANON-Laserstrahldrucker, Modell LBP-CX und sollte gute Ergebnisse auf einem Rasteranzeigebildschirm erbringen.
- Da vertikale und horizontale Zeichenabmessungen nur durch einzelne Pixel dargestellt werden können, muß die Methode im wesentlichen die definierte Abmessung (entweder X oder Y) durch die Pixelabmessung (wie in INPNCS.FTN berechnet) teilen und auf das nächstgelegene ganze Pixel runden. Im Ergebnis werden die in IXDIM(NDMPAR) und IYDIM(NDMPAR) gespeicherten Abmessungen durch die Anzahl der Pixel ersetzt, welche als sie am besten darstellend berechnet wurden. Es gibt gegenwärtig zusätzliche Bedenken wie oben erwähnt.
- Eingabe:
- XPIX = X-Pixel-Abmessung
- YPIX = Y-Pixel-Abmessung
- (Anmerkung: X- und Y-Pixel-Abmessungen müssen identisch sein.)
- Eine gesteuerte Abmessung kann niemals 0 sein. Dies ist notwendig, um zu verhindern zu helfen, daß Grundstriche, etc. bei sehr kleiner Schriftgröße verschwinden.
- IF (IXDIM(J).EQ.0) IXDIM(J)=1
- YDIM=IYDIM(J)O-IYD
- IDIF-YDIM/YPIX+SIGN(.5,XDIM)
- IYDIMJ-IDIF+IYSTAN
- Anmerkung: (1/2 - 1-1/4 Pixel "Abschaltung"). Wenn eine Y-Abmessung als ein Pixel berechnet wird, wird angenommen, daß die Darstellung erreicht wurde, weil die Abmessung irgendwo zwischen 1/2 und 1-1/2 Pixel lag. Da eine bestimmte Abmessung im allgemeinen nur bei sehr geringen Schriftgrößen und Auflösungen in einer Darstellung mit einem Pixel resultiert, wenn die Veränderung von 1/2 Pixel gegenüber einer Abmessung aus 1 Pixel einfacher wahrgenommen werden kann, ist es notwendig, solche Abmessungen nicht runden zu lassen. Jede Verschlechterung des Zeichenumrisses aufgrund von Nichtausrichtung wird durch den Mangel an ausreichender Auflösung versteckt oder verringert.
- IF (IYDIMJ.NE.1) IYDIM(J)-IDYIMJ
- IF (IYDIMJ.EQ.1) IYDIM(J) =-IYDIM(J)
- Wenn nach der obigen Routine irgendeine Abmessung 0 bleibt, wird diese "festverdrahtet" mit einem Pixel.
- Die Verarbeitung von Y- und X-SKELETT-Punkten ist identisch. Deshalb funktioniert die hier dargestellte Routine für beide, obwohl immer nur auf Y Bezug genommen wird.
- Die baumartige Struktur der SKELETT-Daten garantiert, daß jeder Skelettpunkt schließlich an diese Routine übertragen wird. Hier wird bestimmt, ob der Punkt an dem Gitter auszurichten ist oder nicht. Der Effekt der Gitterausrichtung (oder Nichtausrichtung am Gitter) wird versetzt, um mit dem Gitter auszurichten. Zu Beginn wird ein Punkt versetzt, um mit dem Gitter auszurichten. Dieser Versatz wird auf jeden damit verbundenen Skelettpunkt übertragen. Jeder damit verbundene Punkt wird dann gitterausgerichtet und deren einzelne Versätze werden ebenfalls auf deren entsprechende verbundene Skelettpunkte übertragen, etc.
- Eingabe:
- ICSKEL = aktueller Index in ISK-Matrix (Skelettpunkte)
- IC = Index in eingegebenem Umriß und Ausgabeumrißmatrizen (Umrißkoordinaten)
- Y or X = Y- oder X-Wert vor Gitterausrichtung
- Ausgabe:
- Y or X = neuer Y- oder X-Wert nach Gitterausrüstung
- DY oder DX Versatz (Y bei Eintritt minus Y bei Ausgang)
- Vorkehrungen müssen getroffen werden, damit angezeigt wird, wann ein Punkt nicht am Gitter auszurichten ist (AUSRICHTUNGS- ATTRIBUTKENNZEICHEN). Dies ist erforderlich, um Einheitlichkeit von Neigungswinkeln, Diagonalen und bei "1/2 bis 1-1/2 PIXEL ABSCHALTUNG", wie in DIMPIX.FTN beschrieben, zu gewährleisten. Gegenwärtig wird das Zeichen des Skelettpunktindexes in der Umrißmatrix (Xin,YIN) verwendet, um AUSRICHTUNG anzugeben, wenn Index (IC) größer als 0 ist, und NICHTAUSRICHTUNG, wenn der Index (IC) kleiner als 0 ist. (Achtung: Es muß darauf geachtet werden, daß nur der absolute Wert von IC, wenn dieser als Index verwendet wird, benutzt wird.)
- IF (IC.LT.0 GO TO 100
- Bevor ein Punkt verarbeitet wird, wird eine Überprüfung durchgeführt, um festzustellen, ob ein vorhergehender VERBINDUNGS- Skelettpunkt einen Versatz (YOUR) für den aktuellen Punkt (Index = abs val (IC)) vorsieht.
- 95 Y=YY+YOUR !INCLUDE PAST ADJUSTMENTS
- Nach Ausführung jedes durch einen vorhergehenden VERBINDUNGS- Skelettpunkt ausgeführten Versatzes wird der aktuelle Punkt am Gitter ausgerichtet (wenn angebracht), indem der y-Wert auf die nächstgelegene Pixelgrenze gerundet wird. Dies wird durch Addition des vorher gespeicherten Versatzes (YOUR) zu dem y- Wert (Y), Division durch die y-Pixel-Abmessung (YPIX), Addition von 0,5 und Kürzung erreicht. Die resultierende Anzahl von Pixeln (IY) wird mit der Pixelabmessung (YPIX) multipliziert, um die am Gitter ausgerichteten Werte zu erhalten. Der neue am Gitter ausgerichtete Wert (Y) sowie der aktuelle zur Erzeugung von Gitterausrichtung notwendige Versatz (DY) wird von der Routine zurückgegeben.
- Mindestens einer der beiden Skelettpunkte, welche durch direkte Verbindung miteinander gekoppelt sind, muß am Gitter ausgerichtet werden. Ansonsten ergeben sich unvorhersagbare Ergebnisse. Deshalb müssen alle mit dem aktuellen Skelettpunkt verbundenen Punkte überprüft werden (ASYSRC.FTN), ob sie als nicht am Gitter auszurichtend gekennzeichnet sind, um jede ähnliche Nichtausrichtungsbedingung herauszufinden. Wenn eine oder mehrere gefunden werden, ist das aktuelle Nichtausrichtungskennzeichen ungültig, der Punkt wird ausgerichtet und der damit verbundene Punkt wird vorerst als "nichtauszurichtend" gekennzeichnet. Beabsichtigt ist, daß in einem gegebenen "Ast" des Baumes, wenn eine Reihe von nichtausgerichteten verbundenen Punkten gefunden wird, nur das Ende des "Astes" tatsächlich nicht ausgerichtet wird.
- Wenn ein Skelettpunkt (Index=ICSKEL) als nicht auszurichten gekennzeichnet ist, wird überprüft, daß keiner der damit verbundenen Punkte auch als nicht am Gitter auszurichten gekennzeichnet ist. Diese Bedingung kann auf zwei Arten existieren: zum ersten als gekennzeichnete Referenz zu dem verbundenen Punkt in der Skelettpunktliste oder zum zweiten als gekennzeichneter Wert in der Abmessungstabelle. Beide Fälle werden in dieser Routine überprüft und bei Auffinden wird ein Wert von 1 an ISTAT zurückgesendet. Wenn keine solche Bedingung auftaucht, wird 0 zurückgesendet.
- Eingabe:
- ICSKEL = Index in Skelettpunktmatrix
- Ausgabe:
- ISTAT = Status bei Beendigung:
- 1 = Vorhandensein eines nicht ausgerichteten Punktes in diesem Ast
- 2 = kein nicht ausgerichteter Punkt auf dieser Ebene
- Ein Skelettpunkt kann von 0 bis 7 damit verbundene Skelettpunkte haben, deren abschließenden Koordinatenpositionen von der Koordinatenposition desjenigen Skelettpunkts abhängig sind. Wenn während des Gitterausrichtungsprozesses der Skelettpunkt nach rechts versetzt wird, dann werden die damit verbundenen Skelettpunkte vor ihrer Gitterausrichtung ebenso nach rechts versetzt. Außerdem ist, wenn ein verbundener Punkt mit dem Skelettpunkt über eine GESTEUERTE ABMESSUNG gekoppelt ist, dessen abschließende Koordinatenposition sowohl von Koordinatenposition des Skelettpunkts als auch von der gesteuerten Abmessung abhängig. Wenn ein Skelettpunkt (Index = ISK (ICS,1)) damit verbundene Punkte (ISK(ICS,LK+3)) hat, wird der Index eines jeden einzeln an diese Routine (ASSOCY.FTN) mit der neuen Koordinatenposition (Y) und der Differenz zwischen der neuen und der originalen Position (DY) übertragen.
- Eingabe:
- ICS = Index in Skelettpunktmatrix
- LK = verbundenen Punkt definierender Zeiger
- Y = neue Position von VERBINDUNGS-Skelettpunkt
- DY = Versatz von altem Y zu neuem Y - in GRYAJ.FTN berechnet
- Das vorliegende Verfahren kombiniert den Index des verbundenen Punktes und den Index der gesteuerten Abmessung zu einem Wort (ISK(ICS,LK+3)). Deshalb ist es notwendig, diese beiden Informationen zu extrahieren.
- Ein Abmessungsindex wird nicht immer angegeben, was in einer Null-Abmessung resultiert. Folglich wird die Darstellung in Ausgabepixeln direkt von den eingegebenen Umrißdaten berechnet, d. h. durch Gitterausrichtung nach einem entsprechenden Versetzen.
- IF (NDIM.LE.0) GO TO 1000 ! NULL CONTROLLED-DIMENSION
- Wie in DIMPIX.FTN dargestellt, fallen einige Abmessungen zwischen 1/2 und 1-1/2 Pixel und können am besten durch einen nicht am Gitter ausgerichteten Umriß dargestellt werden. Diese Bedingung wird in DIMPIX durch negative gesteuerte Abmessungen gekennzeichnet, welche nicht auf die nächstgelegenen Pixelgrenze gerundet werden. In dieser Situation wird der verbundene Punkt (YNEW) eine spezifische Entfernung (IABS(IYDIM(NDIM)) von dem Skelettpunkt entfernt positioniert. Die restliche Liste von Skelettpunkten wird dann nach einer Referenz auf diesen verbundenen Punkt abgesucht (INDSRC.FTN). Bei Auffindung wird dessen Index "negativ" gekennzeichnet, um Nichtausrichtung am Gitter anzuzeigen. Dies führt zu Gitterausrichtung, wenn der verbundene Punkt in GRYAJ.FTN verarbeitet wird.
- IF (IYDIM(NDIM).LT.0) GO TO 3000 ! NO GRID ALIGN
- In den meisten Fällen fällt die Verarbeitung bis zu dem Punkt durch, an dem der verbundene Punkt (YNEW) eine spezifizierte Anzahl von Pixeln von dem Skelettpunkt entfernt positioniert wird, wie durch die spezifizierte gesteuerte Abmessung (IYDIM(NDIM) angegeben. Diese Spezifikation einer diskreten Anzahl von Pixeln gewährleistet die Gitterausrichtung des verbundenen Punktes.
- 100 YNEW=Y+(IYDIM(NDIM)*YPIX*SIGN(1.,(Y1-(Y-DY))))
- Wenn jedoch ausreichend Auflösung vorhanden ist, um eine Abweichung von YPIXVR von der gesteuerten Abmessung (IYDIM(NDIM) zu zeigen, wird der verbundene Punkt einfach versetzt und darf bis zur nächsten Gitterlinie bewegt werden, wenn in GRYAJ.FTN verarbeitet worden. Dies wird als der 1-1/4-PIXEL-ABSCHLUSS bezeichnet.
- Wenn keine gesteuerte Abmessung spezifiziert ist (Null-Abmessung) und die aktuelle Umrißabmessung zwischen 1/2 und 1 Pixel ist, wird dessen Abmessung als auf 1 Pixel (IYDIM(NDMPAR) "gesteuert" erklärt. Dies hilft, das Nichterscheinen von Zeichenteilen bei geringer Schriftgröße/Auflösung zu verhindern.
- Wenn in ASSOCY.FTN oder ASSOCX.FTN bestimmt wird, daß ein spezifizierter Skelettpunkt nicht am Gitter auszurichten ist, dann muß dessen Referenz in der SKELETT-(Punkt-)Liste (ISK(N,1)) als "nichtauszurichtend" gekennzeichnet sein, das heißt, dessen Referenz muß negativ gesetzt sein.
- An diesem Punkt der Verarbeitung enthält die eingegebene Umrißmatrix (XIN,YIN) Daten, welche nur zur kursiven Neigung und Y-KLASSEN-Skalierung eingestellt wurden. Skelettpunktmodifikationen haben jedoch keine direkt mit ihnen stattgefunden. Alle Verschiebungen zwecks Gitterausrichtung wurden in der Ausgabeumrißmatrix (XOU,YOU) gespeichert und werden nun dazu verwendet, den originalen Umriß für die abschließende Verarbeitung zu bearbeiten. Jetzt, da die korrekte Position jeden SKE- LETT-Punkts bestimmt wurde, müssen die Umrißsegmente zwischen SKELETT-Punkten versetzt und entsprechend skaliert werden, um tatsächlich den am Gitter ausgerichteten Umriß festzulegen. Jede Umrißschleife wird auf der Grundlage der Schleifendefinitionen in LPEND(20) einzeln verarbeitet.
- Eingabe:
- ISTS = Zeiger auf Beginn der SKELETT-Punktmatrix
- IENS = Zeiger auf Ende der SKELETT-Punktmatrix
- Alle Skelettpunkte werden abgesucht, um jene in dieser Schleife zu lokalisieren. Bei Auffinden werden diese in der ISBUF- Matrix gespeichert, wo sie in Reihe entlang dem Zeichenumriß sortiert werden. Die sortierten Punkte werden aus der eingegebenen Umrißmatrix (IXIN,YIN) in die Ausgabeumrißmatrix (XOU,YOU) bewegt.
- Nach Zusammenstellung aller auf diese Schleife zutreffenden SKELETT-Punkte werden Punktepaare in der ISBUF-Matrix an YADJ.FTN übertragen. Jedes Paar definiert ein Segment entlang dem Umriß, der zu verschieben und skalieren ist.
- Wenn eine Schleife keinen Skelettpunkt hat (fast unmöglich!), muß sie von der eingegebenen Matrix (XIN,YIN) zu der Ausgabematrix (XOU,YOU) bewegt werden.
- Diese Routine verarbeitet ein einzelnes, durch zwei Endpunkte (IBEG,IEND) definiertes Segment entlang einer einzelnen, durch Anfang und Ende der Schleife (ISTAV,IENDV) definierten Zeichenumrißschleife. Dieser Prozeß beinhaltet: (1) die Berechnung des Segmentskalierfaktors auf der Grundlage der originalen Segmentendpunkte (XIN1,YIN1 und XIN2, YIN2) und der neuen Endpunkte nach der Gitterausrichtung (XOU1,YOU1 und XOU2,YOU2) und (2) die Berechnung der Verschiebung, um den Anfang des originalen Segments (XINI,YIN1) mit dem neuen Segmentanfang (XOU1,YOU1) in Übereinstimmung zu bringen.
- Weil Segmente die Enden einer geschlossenen Schleife überbrücken kann, ist eine Vorkehrung zur Verarbeitung des Segments am SCHLEIFEN-Ende getroffen und dann zusätzlich zur Verarbeitung vom SCHLEIFEN-Anfang zum SEGMENT-Ende.
- Beabsichtigt ist die "Beseitigung" des Effektes von UNITAL.FTN an einem Punkt, an dem keine Y-Verarbeitung mehr stattfindet. Durch "Neigen" des Zeichens wird der Neigungswinkel wieder eingeführt, wobei der X-Wert aufgrund der neuen Position des Y-Wertes eine neue Position annimmt. Der neue Effekt ist so, als wären alle Y-Einstellungen entlang dem Neigungswinkel ausgeführt worden und dabei nicht nur neue Y-Werte, sondern auch neue X-Werte erzeugt worden.
- Zwei Punkte sollten beachtet werden. Weil es zwei Umrißmatrizen (XIN,YIN und XOU,YOU) gibt und weil Y-Einstellungen auf die XOU,YOU-Matrix übertragen wurden, während die X-Einstellungen nicht stattgefunden haben, ist der "Neigungs"-Algorithmus eine Kombination aus beiden Matrizen. Außerdem ist zu beachten, daß der Neigungswinkel nicht der in UNITAL.FTN verwendete Zeichen-Neigungswinkel (ANGIT) ist, sondern der Neigungswinkel der Schrift (GLANGT).
- Die folgenden Schritte werden zur abschließenden Verarbeitung genutzt.
- Eingabe:
- LUN = logische Einheit
- ICHAR = Zeichenanzahl
- ILSB = originale linke Stützposition
- IRSB = originale rechte Stützposition
- IOFF = reserviert
- IDDD = reserviert
- IUNIT = Einheitswert
- NREC = Breite des originalen Zeichens
- IMIN = reserviert
- IMAX = reserviert
- HAFPIX = zu allen x-Koordinaten hinzuzuzählender X- Wert, um X-SKELETT-Punkte zwischen den Gitterlinien einzupassen
- Da die Zeichenbreite durch Gitterausrichtung verändert wird, müssen neue seitliche Stützpositionen berechnet werden, damit die gesamte Zeichenbreite (LLSB+WIDTH+RSB) dem Zeicheneinheitswert gleich kommen kann. Mit diesem Ziel werden die neuen minimalen und maximalen X-Werte lokalisiert, um die neue Zeichenbreite zu bestimmen. Neue seitliche Stützpositionen können dann festgelegt werden.
- Der abschließende Schritt besteht in der Verschiebung der X- Werte um den Wert, welcher erforderlich ist, um die am Gitter ausgerichteten Skelettpunkte genau zwischen Gitterlinien (HAF- PIX) fallen zu lassen.
- Es folgt eine Liste der Verzeichnisse, die für die Verarbeitung von CG TIMES, T/F 2500, Zeichen 0003, notwendig sind.
- Datenblock 1: Header
- Feld 1 = Zeichenanzahl (-nummer)
- Feld 2 = LSB
- Feld 3 = RSB
- Feld 4 = Grundlinie
- Feld 5 = reserviert
- Feld 6 = Einheitswert
- Feld 7 = Breite
- Feld 8 = Y-min
- Feld 9 = Y-max
- Feld 10 = Anzahl der Vektorendpunkte = N
- Datenblock 2: Koordinaten
- Feld 1 = Punktzahl
- Feld 2 = X-Koordinate
- Feld 3 = Y-Koordinate
- Feld 4 = IPEN (Wenn IPEN gleich Null ist, zeigt es den Beginn einer neuen Schleife an. Wenn IPEN nicht Null ist, definiert es die Y- KLASSE, welcher diese Koordinate zugeordnet ist.)
- Datenblöcke 1 - 4: Neun Felder, von denen ein jedes X-Abmessungen enthält.
- Feld 1 = Anzahl der Abmessungen in diesem Datenblock
- Felder 2 - 9 = Abmessungen
- Datenblöcke 5 - 8: Dasselbe für Y-Abmessungen
- Datenblock 9: Definition geschlossener Schleife
- Feld 1 = Anzahl der Schleifen
- Feld 2 = Nummer der letzten Koordinate in einer Schleife
- Feld 3 = dasselbe, wenn vorhanden
- Datenblock 10: Definition Y-KLASSE
- Feld 1 = Anzahl der Y-Klassen
- Feld 2 = Untergrenze der Y-Klasse
- Feld 3 = Obergrenze der Y-Klasse
- Felder 4 - 5 = wie 2 und 3, wenn vorhanden
- Datenblock 11: Neigungswinkel
- Feld 1 = Winkel *100
- Feld 2 = reserviert
- Datenblock 12-N+12: Skelettpunktdaten mit N = Anzahl der Skelet-tpunkte
- Feld 1 = Skelettpunktindex zu 00003.LOP-Verzeichnis
- Feld 2 = Anzahl der verbundenen Punkte
- Feld 3 = X- oder Y-Skelettpunktdefinition
- Felder 4 - 10 = verbundener Punkt/Index zu Abmessungsliste
- Die Anwendung der oben dargestellten FORTRAN-Routinen auf die eingegebenen Daten führt zu einem am Gitter ausgerichteten, skalierten Zeichen, welches gefüllt werden kann.
- Aus der vorangehenden Beschreibung einer spezifischen Anwendung des Verfahrens der Erfindung wird ersichtlich, daß das Verfahren in einer Vielzahl von Anwendungen eingesetzt werden kann, um skalierbare Schriften oder Zeichen zu erzeugen, welche in der Lage sind, "bit-map fonts" bei jeder Auflösung und jeder Schriftgröße bereitzustellen. Außerdem kann das Verfahren verwendet werden, um gitterausgerichtete Umrisse zur Ausgabe auf umrißgetriebenen Geräten, wie beispielsweise Stiftplottern, "Millers" und numerisch gesteuerten Maschinen, zu erzeugen.
- Das Verfahren der Erfindung arbeitet mit einer Datenbasis, welche Daten enthält, die die Koordinaten der zeichenumrißdefinierenden Punkte darstellen. Die Koordinaten können in polarer oder kartesischer Notation ausgedrückt werden und können nichtkomprimiert in der Datenbasis oder unter Verwendung einer der bekannten Datenkompressionsmethoden in komprimierter Form gespeichert werden. Deshalb umfaßt der Ausdruck "die Koordinaten darstellenden Daten", wie er hierin verwendet wird, Koordinatendaten in beiden Notationen und in entweder komprimierter oder nicht komprimierter Form.
Claims (9)
1. Verfahren zum Skalieren der Datenbasis von Zeichen von
einer in ein digital gesteuertes Gerät eingegebenen
Datenbasis zum Bereitstellen von "bit map fonts" für
graphische Darstellung, wobei die eingegebene Datenbasis
Daten enthält, die für die Koordinaten einer Mehrzahl von
auf zumindest einem fortlaufenden, geschlossenen
Schleifenumriß eines Zeichens liegenden Punkten repräsentativ
sind, wobei der Umriß in eine Mehrzahl von
aufeinanderfolgenden, aneinander angrenzenden und geordneten
Skalierungssegmenten, von denen jedes Skalierungssegment
zwischen einem Punktepaar auf dem Umriß des Zeichens
angeordnet ist, aufgeteilt ist, wobei das Punktepaar auf dem
Zeichenumriß einen ersten Skelettpunkt und einen zweiten
Skelettpunkt darstellt, die Skelettpunkte ein
Unterelement der Koordinaten des Zeichenumrisses sind und jeweils
ein wichtiges sichtbares Merkmal des Zeichens wie
beispielsweise die Kante eines Grundstriches oder das
Oberteil einer Buchstabenrundung oder die Gabelung, an der
sich zwei Striche schneiden darstellen, wobei die
Skelettpunkte
in der Datenbasis in einer baumartigen
Anordnung miteinander verbunden sind, und wobei das Verfahren
aus folgenden Schritten besteht:
a) Bearbeiten der eingegebenen Basisdaten durch
Verschieben aller Koordinaten in einem jeden
Skalierungssegment, um den entsprechenden ersten
Skelettpunkt mit dem Ausgangsgitter auszurichten, welches
eine Reihe von horizontalen und vertikalen Linien
zum Festlegen der korrekten Positionen der
Skelettpunkte aufweist,
b) weiteres Bearbeiten der Koordinaten der
Skalierungssegmente durch lineares maßstäbliches Anpassen der
Skalierungssegmente mit einem Anpassungsfaktor, der
den entsprechenden zweiten Skelettpunkt mit dem
Ausgangsgitter ausrichtet, wobei die Skelettpunkte aus
X- und Y-Skelettpunkten bestehen und diese Punkte
richtig ausgerichtet werden, wenn die Y- und X-Werte
glatt durch eine jeweilige Y- und X-Pixel-Dimension
teilbar sind und
wobei die Verschiebung und die Anpassung derart
ausgeführt wird, daß bei der Verschiebung eines
Skelettpunktes die damit verbundenen Skelettpunkte
um den selben Betrag in Richtung der Zweige des
Baumes verschoben werden, jedoch die Skelettpunkte in
Richtung der Wurzeln des Baumes nicht verändert
werden.
2. Verfahren nach Anspruch 1, wobei ein oder mehrere
verbundene Skelettpunkte mit Bezug auf zumindest einen
ausgewählten Skelettpunkt und ein oder mehrere verbundene
Skelettpunkte mit Bezug auf zumindest einen ausgewählten
verbundenen Skelettpunkt eingerichtet werden, das
außerdem
die folgenden Schritte aufweist:
Bearbeiten der Koordinaten, um zumindest einige der
verbundenen und weitere verbundene Skelettpunkte mit dem
Ausgangsgitter auszurichten.
3. Verfahren nach Anspruch 1, wobei ein oder mehrere
verbundene Skelettpunkte mit Bezug auf zumindest einen
ausgewählten Skelettpunkt oder ein oder mehrere weitere
verbundene Skelettpunkte mit Bezug auf zumindest einen
ausgewählten Skelettpunkt eingerichtet werden, das außerdem
die folgenden Schritte aufweist:
Bearbeiten der Koordinaten von zumindest einigen der
verbundenen und weiteren verbundenen Skelettpunkten, um
diese Punkte in spezifisch ausgerichtete Positionen mit
Bezug auf das Ausgangsgitter zu bringen.
4. Verfahren nach Anspruch 1, wobei ein oder mehrere
verbundene Skelettpunkte mit Bezug auf zumindest einen
ausgewählten Skelettpunkt und ein oder mehrere weitere
verbundene Skelettpunkte mit Bezug auf zumindest einen
ausgewählten verbundenen Skelettpunkt eingerichtet werden, das
außerdem die folgenden Schritte aufweist:
Bearbeiten der Koordinaten zum Verschieben von zumindest
einigen der verbundenen und weiteren verbundenen
Skelettpunkten um vorbestimmte Abstände, um ihre Positionen mit
Bezug auf den entsprechenden zumindest einen ausgewählten
Skelettpunkt zu steuern.
5. Verfahren nach Anspruch 4, worin die verbundenen und
weitere verbundene Skelettpunkte um vorbestimmte Abstände in
einer vorbestimmten Folge verschoben werden, um die
spezifischen Zeichendimensionen zu steuern.
6. Verfahren nach Anspruch 4, worin der Schritt der
Bearbeitung der Koordinaten zum Verschieben von zumindest
einigen der verbundenen und weiteren verbundenen
Skelettpunkten um vorbestimmte Abstände darin besteht, daß deren
Stellungen in Bezug auf den entsprechenden zumindest
einen ausgewählten Skelettpunkt weggelassen werden, wenn
immer die Auflösung des Ausgangsgitters hoch genug ist,
um jegliche Veränderungen der Abstände, die in dem
Zeichen vorgegeben wurden, genau darzustellen.
7. Verfahren nach Anspruch 1, worin
a) ein oder mehrere verbundene Skelettpunkte mit Bezug
auf zumindest zwei Skelettpunkte,
b) ein oder mehrere weitere verbundene Skelettpunkte
mit Bezug auf die ausgewählten verbundenen
Skelettpunkte eingerichtet werden, um zumindest zwei
baumartige Datenstrukturen aus Skelettpunkten zu bilden;
weiterhin bestehend aus folgenden Schritten:
1) Bearbeiten der Datenstrukturen aus zumindest einigen
der verbundenen und weiteren verbundenen
Skelettpunkten, um die Punkte in spezifische nicht
ausgerichtete Stellungen mit Bezug auf das
Ausgangsgitter zu bringen;
2) Bearbeiten der Datenstrukturen aus zumindest einigen
der verbundenen und weiteren verbundenen
Skelettpunkten zum Verschieben von zumindest einigen
der verbundenen und weiteren verbundenen
Skelettpunkten in Ausrichtung mit dem
Ausgangsgitter; und
3) Bearbeiten der Koordinaten eines zusätzlichen
Punktes, der mit einer der baumartigen Datenstrukturen
verbunden ist, immer wenn die beiden baumartigen
Datenstrukturen auf dem selben Zeichenpunkt
zusammenlaufen, so daß ein Konflikt zwischen den beiden
baumartigen Datenstrukturen vermieden wird.
8. Verfahren nach Anspruch 7, worin die Zeichenumrißsegmente
an spezifische Zonen der Y-Achse verwiesen werden und
alle Segmente innerhalb einer gegebenen Zone der Y-Achse
gleichermaßen in den Schritten 1 und 2 bearbeitet werden.
9. Verfahren nach Anspruch 1, weiterhin bestehend aus
folgenden Schritten:
1. Bearbeiten der Koordinaten der Skalierungselemente
durch lineare Anpassung eines jeden Segmentes, das
nicht ein Segment mit einem diagonalen Teil des
Zeichens ist, mit einem Skalierungsfaktor, der den
entsprechenden zweiten Skelettpunkt in Ausrichtung mit
dem Gitter bringt; und
2. lineare Anpassung jeden Segmentes mit einem
diagonalen Teil des Zeichens mit einem Skalierungsfaktor 1,
wodurch der entsprechende zweite Skelettpunkt mit
Bezug auf einen entsprechenden ersten Skelettpunkt
in seiner ursprünglichen Beziehung verbleibt.
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US06/628,192 US4675830A (en) | 1984-07-06 | 1984-07-06 | Method for producing a scaleable typeface data |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| DE3587690D1 DE3587690D1 (de) | 1994-02-03 |
| DE3587690T2 true DE3587690T2 (de) | 1994-07-28 |
Family
ID=24517860
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| DE3587690T Expired - Lifetime DE3587690T2 (de) | 1984-07-06 | 1985-06-07 | Verfahren um Schrifttypen mit Skalaänderungen herzustellen. |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US4675830A (de) |
| EP (1) | EP0167838B1 (de) |
| JP (1) | JPS6151189A (de) |
| DE (1) | DE3587690T2 (de) |
Families Citing this family (92)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4823108A (en) * | 1984-05-02 | 1989-04-18 | Quarterdeck Office Systems | Display system and memory architecture and method for displaying images in windows on a video display |
| US4847787A (en) * | 1984-12-28 | 1989-07-11 | Minolta Camera Kabushiki Kaisha | Dot image character generator employing a font memory |
| IE852259L (en) * | 1985-09-13 | 1987-03-13 | Scottish & Newcastle Breweries | A method and apparatus for constructing, storing and¹displaying characters |
| US4918740A (en) * | 1985-10-01 | 1990-04-17 | Palantir Corporation | Processing means for use in an optical character recognition system |
| US4785391A (en) * | 1986-02-07 | 1988-11-15 | Bitstream Inc. | Automated bitmap character generation from outlines |
| US4959801A (en) * | 1986-02-07 | 1990-09-25 | Bitstream Inc. | Outline-to-bitmap character generator |
| US4833627A (en) * | 1986-08-29 | 1989-05-23 | The Toles Group | Computerized typesetting correction system |
| US4990903A (en) * | 1986-10-27 | 1991-02-05 | Bestfont Ltd. | Method for storing Chinese character description information in a character generating apparatus |
| US5579416A (en) * | 1986-10-27 | 1996-11-26 | Canon Kabushiki Kaisha | Character processing apparatus for selectively modifying a font pattern |
| US4829446A (en) * | 1986-12-12 | 1989-05-09 | Caeco, Inc. | Method and apparatus for recording and rearranging representations of objects in a model of a group of objects located using a co-ordinate system |
| US5398311A (en) * | 1987-02-25 | 1995-03-14 | Canon Kabushiki Kaisha | Character processing apparatus and method for processing character data as an array of coordinate points of contour lines |
| US4897638A (en) * | 1987-02-27 | 1990-01-30 | Hitachi, Ltd. | Method for generating character patterns with controlled size and thickness |
| JPH0820862B2 (ja) * | 1987-02-27 | 1996-03-04 | キヤノン株式会社 | 文字処理装置 |
| JPS63271290A (ja) * | 1987-04-30 | 1988-11-09 | 株式会社日立製作所 | 文字パタ−ン生成方式 |
| JPS63282870A (ja) * | 1987-05-14 | 1988-11-18 | Minolta Camera Co Ltd | メモリユニットのアドレス指定方式 |
| JPH0823741B2 (ja) * | 1987-06-03 | 1996-03-06 | 株式会社日立製作所 | ベクトル文字もしくはベクトル図形の処理方法 |
| US4974174A (en) * | 1987-08-24 | 1990-11-27 | Wang Laboratories, Inc. | Alignment method for positioning textual and graphic objects |
| US5027304A (en) * | 1987-10-02 | 1991-06-25 | Telecommunication Laboratories, Directorate General of Telecommunications , Ministry of Communications | Character multifont compression and restoration device |
| US5280577A (en) * | 1988-01-19 | 1994-01-18 | E. I. Du Pont De Nemours & Co., Inc. | Character generation using graphical primitives |
| US5562350A (en) * | 1988-04-18 | 1996-10-08 | Canon Kabushiki Kaisha | Output apparatus that selects a vector font based on character size |
| US5274365A (en) * | 1988-10-26 | 1993-12-28 | Sun Microsystems, Inc. | Method and apparatus for minimizing the visual degradation of digital typefaces-character analysis |
| AU629210B2 (en) * | 1988-10-26 | 1992-10-01 | Sun Microsystems, Inc. | Method and apparatus for minimizing the visual degradation of digital typefaces |
| US4933866A (en) * | 1988-11-17 | 1990-06-12 | Vital Lasertype, Inc. | Method and apparatus for generating aesthetically alterable character designs |
| US5081594A (en) * | 1989-01-31 | 1992-01-14 | Kroy Inc. | Real-time rasterization system for a column-oriented printing apparatus or the like |
| JP2836086B2 (ja) * | 1989-03-10 | 1998-12-14 | セイコーエプソン株式会社 | 文字パターンデータ発生装置 |
| US5159668A (en) * | 1989-05-08 | 1992-10-27 | Apple Computer, Inc. | Method and apparatus for manipulating outlines in improving digital typeface on raster output devices |
| US5050103A (en) * | 1989-05-12 | 1991-09-17 | Adobe Systems Incorporated | Method for displaying kanji characters |
| JP2956705B2 (ja) * | 1989-05-24 | 1999-10-04 | ブラザー工業株式会社 | データ変換装置 |
| US5068803A (en) * | 1989-09-15 | 1991-11-26 | Sun Microsystems, Inc. | Method and apparatus for filling contours in digital typefaces |
| JPH03223966A (ja) * | 1989-12-26 | 1991-10-02 | Fuji Xerox Co Ltd | ファイリング装置およびそれを用いたファイル検索方法 |
| EP0471849B1 (de) * | 1990-02-27 | 1995-06-07 | Seiko Epson Corporation | Verfahren zur erzeugung von punktsignalen für zeichenmuster und einrichtung hierzu |
| US5241653A (en) * | 1990-04-12 | 1993-08-31 | Adobe Systems Incorporated | Apparatus and method for adjusting and displaying scaled, rasterized characters |
| US5233336A (en) * | 1990-06-15 | 1993-08-03 | Adobe Systems Incorporated | Connected-run dropout-free center point fill method for displaying characters |
| US5255357A (en) * | 1990-07-13 | 1993-10-19 | Adobe Systems Incorporated | Method for editing character bit maps at small sizes using connected runs |
| US5459828A (en) * | 1990-08-01 | 1995-10-17 | Xerox Corporation | Optimized scaling and production of raster fonts from contour master fonts |
| JPH0493888A (ja) * | 1990-08-03 | 1992-03-26 | Canon Inc | 図形処理方法 |
| JP3189276B2 (ja) * | 1990-09-12 | 2001-07-16 | ブラザー工業株式会社 | データ変換装置 |
| JP2909273B2 (ja) * | 1991-06-10 | 1999-06-23 | 淑郎 大塚 | アウトライン・フォントの線幅調整方法および装置 |
| JP2606486B2 (ja) * | 1991-06-24 | 1997-05-07 | ブラザー工業株式会社 | 描画装置 |
| US5301267A (en) * | 1991-09-27 | 1994-04-05 | Adobe Systems Incorporated | Intelligent font rendering co-processor |
| KR960015761B1 (en) * | 1992-01-27 | 1996-11-21 | Fujitsu Ltd | Charaster gerenating method and apparatus |
| US5239391A (en) * | 1992-03-20 | 1993-08-24 | Eastman Kodak Company | Apparatus for generating halftone dots from dot envelope parameters |
| JP3315464B2 (ja) * | 1992-04-29 | 2002-08-19 | キヤノン株式会社 | 画像描写方法及び装置 |
| US5500924A (en) * | 1992-05-07 | 1996-03-19 | Apple Computer, Inc. | Method for vector plotting a bitmap with a reduced number of lines |
| JP2793466B2 (ja) | 1992-06-11 | 1998-09-03 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 画像の可変拡大方法及びその装置 |
| JPH0660173A (ja) * | 1992-06-11 | 1994-03-04 | Internatl Business Mach Corp <Ibm> | 画像を縮小する方法および装置 |
| JPH06208370A (ja) * | 1992-08-28 | 1994-07-26 | Go Corp | エイリアシング阻止および格子適合を結合した文字表示ラスタ化方法 |
| US5664086A (en) * | 1993-04-16 | 1997-09-02 | Adobe Systems Incorporated | Method and apparatus for generating digital type font, and resulting fonts using generic font and descriptor file |
| US5586241A (en) * | 1993-06-10 | 1996-12-17 | Hewlett-Packard Company | Method and system for creating, specifying, and generating parametric fonts |
| CA2125608A1 (en) * | 1993-06-30 | 1994-12-31 | George M. Moore | Method and system for providing substitute computer fonts |
| JP2964841B2 (ja) * | 1993-07-15 | 1999-10-18 | ブラザー工業株式会社 | データ変換装置 |
| JP2876942B2 (ja) * | 1993-07-28 | 1999-03-31 | ブラザー工業株式会社 | データ変換装置 |
| US5577170A (en) * | 1993-12-23 | 1996-11-19 | Adobe Systems, Incorporated | Generation of typefaces on high resolution output devices |
| US5513342A (en) * | 1993-12-28 | 1996-04-30 | International Business Machines Corporation | Display window layout system that automatically accommodates changes in display resolution, font size and national language |
| US5600347A (en) * | 1993-12-30 | 1997-02-04 | International Business Machines Corporation | Horizontal image expansion system for flat panel displays |
| JP3641283B2 (ja) * | 1994-04-08 | 2005-04-20 | 富士通株式会社 | グラフィックデータ生成装置 |
| US5754187A (en) * | 1994-05-16 | 1998-05-19 | Agfa Division, Bayer Corporation | Method for data compression of digital data to produce a scaleable font database |
| US5734388A (en) * | 1994-05-16 | 1998-03-31 | Agfa Division, Bayer Corporation | Method and apparatus for data compression of digital data to produce a scaleable font database |
| DE69525390D1 (de) * | 1994-06-17 | 2002-03-21 | Canon Kk | Verfahren und Vorrichtung zur Gewinnung von Konturinformation |
| US5943063A (en) * | 1995-10-23 | 1999-08-24 | Adobe Systems, Inc. | Method and apparatus for rendering characters |
| US5929866A (en) * | 1996-01-25 | 1999-07-27 | Adobe Systems, Inc | Adjusting contrast in anti-aliasing |
| KR100219072B1 (ko) * | 1996-04-02 | 1999-09-01 | 김영환 | 중심축 변환을 이용한 폰트 및 그 폰트 서체의 변형 및 라스터라이징 방식 |
| US5630028A (en) * | 1996-05-28 | 1997-05-13 | Bowne & Co., Inc. | Method of representing graphic data using text |
| US5880184A (en) * | 1998-01-27 | 1999-03-09 | Environmental Packing | Low-density packing compositions |
| US6323879B1 (en) * | 1998-05-14 | 2001-11-27 | Autodesk, Inc. | Method and system for determining the spacing of objects |
| US6970258B1 (en) | 1999-07-27 | 2005-11-29 | Xerox Corporation | Non-printing patterns for improving font print quality |
| US7016073B1 (en) | 1999-07-27 | 2006-03-21 | Xerox Corporation | Digital halftone with auxiliary pixels |
| US6919973B1 (en) | 1999-07-27 | 2005-07-19 | Xerox Corporation | Auxiliary pixel patterns for improving print quality |
| US6563502B1 (en) | 1999-08-19 | 2003-05-13 | Adobe Systems Incorporated | Device dependent rendering |
| US7184046B1 (en) * | 1999-09-28 | 2007-02-27 | Monotype Imaging Inc. | Method and apparatus for font storage reduction |
| JP2001186454A (ja) * | 1999-12-24 | 2001-07-06 | Matsushita Electric Ind Co Ltd | 光ディスク再生装置 |
| US6636235B1 (en) * | 2000-10-12 | 2003-10-21 | International Business Machines Corporation | Lettering adjustments for display resolution |
| US7598955B1 (en) * | 2000-12-15 | 2009-10-06 | Adobe Systems Incorporated | Hinted stem placement on high-resolution pixel grid |
| TW493144B (en) * | 2001-02-26 | 2002-07-01 | Ulead Systems Inc | Drawing method for trimmed ribbon graphs and computer readable media for program storage |
| US7002597B2 (en) * | 2003-05-16 | 2006-02-21 | Adobe Systems Incorporated | Dynamic selection of anti-aliasing procedures |
| US7006107B2 (en) * | 2003-05-16 | 2006-02-28 | Adobe Systems Incorporated | Anisotropic anti-aliasing |
| US7270918B2 (en) * | 2003-12-24 | 2007-09-18 | Eastman Kodak Company | Printing system, process, and product with microprinting |
| US7719536B2 (en) * | 2004-03-31 | 2010-05-18 | Adobe Systems Incorporated | Glyph adjustment in high resolution raster while rendering |
| US7580039B2 (en) * | 2004-03-31 | 2009-08-25 | Adobe Systems Incorporated | Glyph outline adjustment while rendering |
| US7639258B1 (en) | 2004-03-31 | 2009-12-29 | Adobe Systems Incorporated | Winding order test for digital fonts |
| US7602390B2 (en) * | 2004-03-31 | 2009-10-13 | Adobe Systems Incorporated | Edge detection based stroke adjustment |
| US7333110B2 (en) * | 2004-03-31 | 2008-02-19 | Adobe Systems Incorporated | Adjusted stroke rendering |
| KR100709364B1 (ko) * | 2005-06-23 | 2007-04-20 | 삼성전자주식회사 | 패턴 이미지 생성 방법 및 장치 |
| US7868888B2 (en) | 2006-02-10 | 2011-01-11 | Adobe Systems Incorporated | Course grid aligned counters |
| US20080068383A1 (en) * | 2006-09-20 | 2008-03-20 | Adobe Systems Incorporated | Rendering and encoding glyphs |
| US20080078692A1 (en) * | 2006-09-28 | 2008-04-03 | Wegerer David A | Absorption recovery processing of FCC-produced light olefins |
| US8984424B2 (en) * | 2009-02-03 | 2015-03-17 | Microsoft Technology Licensing, Llc | Layout of user interface elements |
| CN101873451B (zh) * | 2010-05-19 | 2012-09-05 | 杭州海康威视数字技术股份有限公司 | 一种实现在屏显示字符显示的方法及装置 |
| US9536279B2 (en) | 2013-03-11 | 2017-01-03 | Google Technology Holdings LLC | Method and apparatus for creating a graphics data representation and scaling a graphic represented thereby |
| US9367897B1 (en) * | 2014-12-11 | 2016-06-14 | Sharp Laboratories Of America, Inc. | System for video super resolution using semantic components |
| US10347016B2 (en) * | 2016-01-12 | 2019-07-09 | Monotype Imaging Inc. | Converting font contour curves |
| US10936792B2 (en) | 2017-12-21 | 2021-03-02 | Monotype Imaging Inc. | Harmonizing font contours |
Family Cites Families (12)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| GB1442544A (en) * | 1973-05-11 | 1976-07-14 | Rockwell International Corp | Apparatus for use in character generation |
| US4029947A (en) * | 1973-05-11 | 1977-06-14 | Rockwell International Corporation | Character generating method and system |
| US3946365A (en) * | 1973-12-13 | 1976-03-23 | Bantner John A | Graphic symbol generator |
| GB1581546A (en) * | 1976-07-08 | 1980-12-17 | Xenotron Ltd | Compression and expansion of scanned images |
| US4156915A (en) * | 1977-03-28 | 1979-05-29 | Vector General, Inc. | Font generating system |
| US4124871A (en) * | 1977-08-31 | 1978-11-07 | International Business Machines Corporation | Image data resolution change apparatus and process utilizing boundary compression coding of objects |
| US4298945A (en) * | 1978-05-12 | 1981-11-03 | Eltra Corporation | Character generating method and apparatus |
| US4338673A (en) * | 1978-12-05 | 1982-07-06 | Compugraphic Corporation | Phototypesetting system and method |
| JPS5858584A (ja) * | 1981-10-02 | 1983-04-07 | 株式会社 写研 | 文字画像デジタル化装置 |
| US4610026A (en) * | 1982-04-30 | 1986-09-02 | Hitachi, Ltd. | Method of and apparatus for enlarging/reducing two-dimensional images |
| US4528693A (en) * | 1982-09-30 | 1985-07-09 | International Business Machines Corporation | Apparatus and method for scaling facsimile image data |
| JPS5969787A (ja) * | 1982-10-15 | 1984-04-20 | 日本電気オフィスシステム株式会社 | 文字信号発生方法とその装置 |
-
1984
- 1984-07-06 US US06/628,192 patent/US4675830A/en not_active Expired - Lifetime
-
1985
- 1985-06-07 EP EP85107021A patent/EP0167838B1/de not_active Expired - Lifetime
- 1985-06-07 DE DE3587690T patent/DE3587690T2/de not_active Expired - Lifetime
- 1985-07-05 JP JP60148126A patent/JPS6151189A/ja active Granted
Also Published As
| Publication number | Publication date |
|---|---|
| US4675830A (en) | 1987-06-23 |
| JPS6151189A (ja) | 1986-03-13 |
| EP0167838A2 (de) | 1986-01-15 |
| EP0167838B1 (de) | 1993-12-22 |
| EP0167838A3 (en) | 1988-06-08 |
| JPH0443591B2 (de) | 1992-07-17 |
| DE3587690D1 (de) | 1994-02-03 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| DE3587690T2 (de) | Verfahren um Schrifttypen mit Skalaänderungen herzustellen. | |
| DE69221414T2 (de) | Intelligenter Schriftartdarstellungskoprozessor | |
| DE69130382T2 (de) | Zeichenverarbeitungsverfahren | |
| DE69312401T2 (de) | Vorrichtung und verfahren zur erzeugung von linien von variabler breite | |
| DE69512568T2 (de) | Verfahren zur Herstellung einer Datenbank mit skalierbaren Schrifttypen | |
| DE3342947C2 (de) | System zur Verarbeitung eines grafischen Musters | |
| DE68919024T2 (de) | Verfahren und Prozessor zur Abtastumsetzung. | |
| DE69428491T2 (de) | Bildlinse | |
| DE69323983T2 (de) | Methode zur Modifizierung des Fettdruckes von Buchstaben | |
| DE3806223C2 (de) | Verfahren zur Erzeugung von Zeichenmustern | |
| DE69512567T2 (de) | Verfahren und Vorrichtung zur Wiederherstellung von Buchstabenumrisslinien | |
| DE3935574C2 (de) | Verfahren zum Minimieren der beim Skalieren eines digitalen Schriftbildes auftretenden visuellen Beeinträchtigung | |
| DE602004002393T2 (de) | Antialiasing-verfahren und -vorrichtung zur darstellung einer region eines zweidimensionalen distanzfeldes, das ein objekt darstellt | |
| DE3546136C2 (de) | ||
| DE69129474T2 (de) | Veränderung eines graphischen Anzeigebildes | |
| DE3044092C2 (de) | ||
| DE69413035T2 (de) | Antialiasing-verfahren und -vorrichtung mit automatischer justierung von horizontalen und vertikalen rändern an einem zielgitter | |
| DE4014231A1 (de) | Verfahren zum bearbeiten der steuerpunkte eines symbolbildes | |
| DE69022109T2 (de) | Darstellungsverfahren für Kanji-Zeichen. | |
| DE69629173T2 (de) | Automatisches Plazieren eines graphischen Musters | |
| DE69423129T2 (de) | System und Verfahren zur Kurvendarstellung | |
| DE2919013A1 (de) | Verfahren zum kodieren von schriftzeichen und nach diesem verfahren arbeitende speichereinrichtung in einem setzgeraet | |
| DE2144596A1 (de) | Video-Anzeigevorrichtung | |
| DE19713654B4 (de) | Progressiv darstellbare Umrissschrift und Verfahren zum Erzeugen, Übertragen und Darstellen derselben | |
| DE19528596C2 (de) | Verfahren und Vorrichtung zur Kolorierunterstützung |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| 8380 | Miscellaneous part iii |
Free format text: DER INHABER IST ZU AENDERN IN: MILES INC., WILMINGTON, MASS., US |
|
| 8364 | No opposition during term of opposition | ||
| 8327 | Change in the person/name/address of the patent owner |
Owner name: BAYER CORP. (N.D.GES.D. STAATES INDIANA), WILMINGT |
|
| 8327 | Change in the person/name/address of the patent owner |
Owner name: AGFA MONOTYPE CORP., WILMINGTON, MASS., US |
|
| 8328 | Change in the person/name/address of the agent |
Representative=s name: DERZEIT KEIN VERTRETER BESTELLT |