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
Application number
DE3587690T
Other languages
English (en)
Other versions
DE3587690D1 (de
Inventor
Thomas B Hawkins
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Agfa Monotype Corp
Original Assignee
Miles Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Miles Inc filed Critical Miles Inc
Application granted granted Critical
Publication of DE3587690D1 publication Critical patent/DE3587690D1/de
Publication of DE3587690T2 publication Critical patent/DE3587690T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/20Contour 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

    Hintergrund der Erfindung
  • 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.
  • Kurzbeschreibung der Erfindung
  • 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.
  • Beschreibung der Zeichnungen
  • 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.
  • Detaillierte Beschreibung der Erfindung
  • 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.
  • PROZESSTHEORIE UND -TERMINOLOGIE 1.0 Prozeßsteuerung
  • Der Prozeß der Erfindung verbessert Skalierungsergebnisse durch Isolierung spezifischer Skalierprobleme und Bereitstellung der folgenden Steuerungen.
  • 1.1 Gitterausrichtung
  • 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.
  • 1.2 Interne Zeichenordnung in Bezug auf Grundlinie Höhe etc.
  • 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.
  • 1.3 X/Y-Abmessungen
  • 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.
  • 1.4 Definition von Steuerabmessungen zum Skalierzeitpunkt
  • 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.
  • 1.5 Anordnung von Zeichenverbindungen
  • 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.
  • 1. 6 Kursivschriften
  • 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.
  • 2.0 Datenbeschreibung
  • 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.
  • 2.1 Zeichenumrißdaten
  • 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
  • 2. 2 Skelettdatenbeschreibung
  • 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).
  • 3.0 Bearbeitungsreihenfolge
  • 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.
  • 3.1 Festlegung von Ausgangsschriftgröße und -auflösung
  • 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.
  • 3.2 Zu ladende Daten
  • 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.
  • 3.3 Steil stellen
  • 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.
  • 3.4 Y-Klasse-Verarbeitung
  • 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.
  • 3.5 Umwandlung von X- und Y-Abmessungen in Ausgangspixel
  • 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.
  • 3.6 Y-Gitter-Ausrichtung und Y-Verbindungen
  • 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.
  • 3.7 Y-Verarbeitung von Segmenten zwischen Skelettpunkten
  • 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.
  • 3.8 Kursivdarstellung
  • Wenn angebracht, wird das Zeichen wieder kursiv dargestellt.
  • Details werden weiter unten in ITALIC.FTN dargestellt.
  • 3.9 X-Gitter-Ausrichtung und X-Verbindungen
  • 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.
  • 3.10 X-Verarbeitung von Segmenten zwischen Skelettpunkten
  • 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.
  • 3.11 X-Verschiebung
  • 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.
  • 3.12 Punktrastererzeugung
  • 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.
  • 4.0 Spezifische Anwendung des Verfahrens der Erfindung
  • 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ß.
  • FORTRAN- Routinen
  • Der FORTRAN-Quellcode zur Anwendung des Verfahrens der Erfindung wird im folgenden dargelegt.
  • 5.1 BLACK.FTN - Bearbeitung von Zeichenumrissen zur Skalierung
  • 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.
  • 5.2 INPNCS.FTN - Setzen von Skalierungsparametern
  • 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
  • 5.3 LOADSK.FTN - Laden von Skelettdaten
  • Daten werden direkt in die entsprechenden SKELETT-Datenbereiche geladen.
  • Eingabe:
  • LUN = Anzahl an logischen Einheiten.
  • SUBROUTINE LOADSK (LUN)
  • 5.4 LOADCH.FTN - Laden des Zeichenumrisses
  • 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.
  • 5.5 LPSCAL.FTN - Zeicheneinstellung innerhalb der Y-Klasse
  • 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.
  • 5.6 UNITAL.FTN - Steilstellung einer Kursivschrift für Y-Verarbeitung
  • 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.
  • 5.7 DIMPIX.FTN - Umwandlung von gesteuerten Abmessungen in Pixel
  • 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.
  • 5.8 GRYAJ.FTN/GRXAJ.FTN - Gitterausrichtung von Y/X-Skelettpunkten
  • 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.
  • 5. 9 ASXSRC.FTN/ASYSRC.FTN
  • 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
  • 5.10 ASSOCY.FTN/ASSOCX.FTN - Beibehaltung von Zeichenabmessungen durch "Verbindungen"
  • 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.
  • 5.11 INDSRC.FTN - Suche nach spezifizierter Skelettreferenz
  • 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.
  • 5.12 YPROC.FTN/XPROC.FTN - Prozeß zwischen Skelettpunkten
  • 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.
  • 5.13 YADJ.FTN/XADJ.FTN - Skalieren eines Segments
  • 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.
  • 5.14 ITALIC.FTN - Kursivgestaltung nach Y-Verarbeitung
  • 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).
  • 5.15 NCSBLO.FTN - Endverarbeitung
  • 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.
  • 5.16 Beispieldaten
  • Es folgt eine Liste der Verzeichnisse, die für die Verarbeitung von CG TIMES, T/F 2500, Zeichen 0003, notwendig sind.
  • 5.17 00003.LOP - 8400 Vektorumriß aus geschlossener Schleife
  • 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.)
  • 5.18 00003.SKl - Skelettdaten
  • 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.
DE3587690T 1984-07-06 1985-06-07 Verfahren um Schrifttypen mit Skalaänderungen herzustellen. Expired - Lifetime DE3587690T2 (de)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 日本電気オフィスシステム株式会社 文字信号発生方法とその装置

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