-
HINTERGRUND
DER ERFINDUNG
-
1. Bereich
der Erfindung
-
Die
vorliegende Erfindung betrifft das Rendern von Bildern zum Ausdrucken
auf Druckern, insbesondere auf Seitendruckern wie Laserdruckern
und spezifischer Farblaserdruckern.
-
2. Stand der
Technik
-
In
den letzten Jahren ist die für
Desktop-Computer zur Verfügung
stehende Rechenleistung immer mehr gestiegen. Gleichzeitig ist auch
die Hochwertigkeit der Druckfähigkeiten,
die dem durchschnittlichen Computerbenutzer zur Verfügung stehen,
gewachsen. Laserdrucker, die nahezu Schriftsatzqualität bieten, sind
im Geschäftsbereich
an der Tagesordnung. Farbdrucker mit mäßiger Auflösung, die eine brauchbare Farbleistung
bieten, werden für
eine große
Klasse von Benutzern immer erschwinglicher.
-
Gemäß dem obigen
Trend wird davon ausgegangen, dass die Nachfrage nach fotorealistischen
und nahe fotorealistischen Farbdruckern ansteigen wird. Derzeit
gibt es allgemein drei verschiedene Farbdruckertypen: Farbsublimations-,
Tintenstrahl- und Laserdrucker. Farbsublimationsdrucker bieten gute
Qualität,
sind aber langsam und teuer. Kostenarme Tintenstrahldrucker sind
langsam und erzeugen Produkte von niedriger Qualität. Kostspieligere
Tintenstrahldrucker sind zwar immer noch langsam, erzeugen aber
Produkte von guter Qualität
für größere Bilder.
Im Vergleich zu Farbtintenstrahldruckern (die den größten Teil
der derzeit verkauften Farbdrucker ausmachen) sind jedoch Farblaserdrucker
am vielversprechendsten zum Erzielen eines fotorealistischen Farbausgangs
bei hoher Druckgeschwindigkeit und niedrigen Kosten pro Kopie.
-
Die
Funktionsweise von Druckern (im Gegensatz zu Plottern) besteht darin,
kleine Punkte (die auch als Pixel bezeichnet werden) zu einem Muster
auf der Seite zu formen. Bei Laserdruckern werden diese kleinen
Punkte durch Abtasten eines Laserstrahls in einer Abtastrichtung über eine
fotoempfindliche Trommel gebildet. (Das Bild auf der fotoempfindlichen
Trommel wird dann entwickelt, auf die tatsächliche Seite übertragen und
dort fixiert.) Das Abtasten erfolgt typischerweise mit einem rotierenden
polygonalen Spiegel, auf den der Laserstrahl gerichtet wird. Jede
Facette des Spiegels bewirkt, dass der Laserstrahl einmal über die
fotoempfindliche Trommel abgetastet wird. Bei einer Abtastung wird
der Laserstrahl moduliert, d. h. ein- und ausgeschaltet, um entweder
einen Punkt an einer bestimmten Stelle im Abtastbereich zu belichten
oder einen Punkt nicht zu belichten. Die fotoempfindliche Trommel
bewegt sich mit einer konstanten Geschwindigkeit während des
Abtastens in einer Papiervorschubrichtung, um zu bewirken, dass
aufeinander folgende Abtastungen verschoben werden. Der Betrag,
um den aufeinander folgende Abtastzeilen verschoben wird, wird als
Zeilenabstand bezeichnet.
-
Die
Sammlung von Punkten in einer Abtastzeile wird als Rasterabtastzeile
bezeichnet. Eine Gruppe von aufeinander folgenden Abtastzeilen wird
als Band oder als Abtastzeilen-Bildstreifen bezeichnet. Die Sammlung
aller Punkte in allen Abtastzeilen auf einer Seite wird als Rasterbild
bezeichnet. Eine Sammlung von Punkten, die in einem bestimmten (gewöhnlich rechteckigen)
Bereich der Seite abgedruckt werden sollen, wird als Pixel-Map bezeichnet.
So könnte
beispielsweise auf einer Farbbroschüre das Zeichen einer Firma
als Pixel-Map definiert und über
den oberen Rand der Seite ausgedruckt werden.
-
Im
Gegensatz zum Tintenstrahldrucker, der ein Beispiel für ein Gerät mit Banden
(Abtastzeilen-Bildstreifen)
ist, ist ein Laserdrucker von seiner Natur her ein Seitengerät. Das heißt, sobald
das Laserdrucken gestartet (d. h. das Laserabtasten der Trommel
begonnen) hat, kann es nicht mehr gestoppt oder pausiert werden,
sondern muss ohne Unterbrechung bis zum Ende fortgesetzt werden.
Tintenstrahldrucker haben zwar bestimmte Echtzeitdatenanforderungen
in Bezug auf ein einzelnes Band, aber der Laserdruckbetrieb hat
höhere Echtzeitdatenanforderungen,
die für
die Erzeugung eines zufriedenstellenden Drucks erfüllt werden
müssen, da
Daten für
die gesamte Seite zur Verfügung
gestellt werden müssen.
-
Ein
Laserdrucker besteht konventionell aus einem Drucker-Controller
und einer Druckmaschine. Die Druckmaschine belichtet und entwickelt
Punkte auf der physischen Seite. Der Drucker-Controller sendet Druckerbefehle
und Druckdaten zur Druckmaschine, um zu bewirken, dass die gewünschte Seite
ausgedruckt wird. Der Drucker-Controller empfängt eine Seitenbeschreibung
von einem Anwendungsprogramm in einer Seitenbeschreibungssprache
(PDL = Page Description Language) wie z. B. PostscriptTM von
Adobe Systems.
-
Drucker-Controller
empfangen gewöhnlich
PDL-Statements von einem Anwendungsprogramm und interpretieren diese
mit Hilfe eines PDL-Interpreters. PDL-Interpreter führen gewöhnlich eine
Vorverarbeitung der PDL-Statements durch, indem sie die tatsächlichen
Formen und Positionen für
die Graphikobjekte in Verbindung mit dem Statement berechnen und
dann diese Graphikobjekte mit Hilfe einer Markierungsschnittstelle auf
das Seitenrasterbild anwenden. Diese Schnittstelle besteht aus einem
im Allgemeinen proprietären,
aber gewöhnlich
hinlänglich
verstandenen Satz von Operationen, die als Rasterisierungsanforderungen
bezeichnet werden. Die Marking Interface (Markierungsschnittstelle)
leitet die Rasterisierungsanforderungen zu einem nachfolgenden Rasterisierungsprozess.
So könnte
zum Beispiel ein PDL-Interpreter den folgenden Satz von Rasterisierungsanforderungen
(als „RAST" bezeichnet) zum
Beschreiben des Rasterbildes für
eine Seite verwenden:
RAST1: Anwenden einer rechteckigen Pixel-Array
einer bestimmten Farbe (für
eine Textanwendung);
RAST2: Ausfüllen eines trapezförmigen Bereiches
mit einer bestimmten Farbe (Flächengraphik);
RAST3:
Expandieren (Vergrößern, Rotieren,
Skalieren, Schrägen
usw.) eines Bildes und Anwenden des Bildes auf das Raster.
-
Die
vorliegende Erfindung ist auch auf Graphikumgebungen wie Microsoft
Windows, Apple Macintosch usw. anwendbar, von denen Graphikbefehle
(im Gegensatz zu PDL-Statements) ausgegeben werden. Diese Graphikbefehle
können
auf ähnliche
Weise von Graphikbefehlsprozessoren zu Rasterisierungsanforderungen
verarbeitet werden. Und in einigen Fällen erzeugen diese Umgebungen
direkt Rasterisierungsanforderungen eines hinlänglich bekannten und öffentlich
verfügbaren
Formats.
-
In
konventionellen PDL-Interpretern sind Rasterisierungsanforderungen
gewöhnlich
auf eine von drei grundsätzlichen
Weisen organisiert. Eine erste Weise des Organisierens von Rasterisierungsanforderungen beinhaltet
das Sortieren von Anforderungen zu einer Display-Liste. Anforderungen
werden üblicherweise
in aufsteigender Reihenfolge der y-Koordinate sortiert. So könnten zum
Beispiel die folgenden Anforderungen von einer PDL-Quelle empfangen
und in der folgenden Reihenfolge aufgeführt werden:
- 1.
Dreieck beschreiben
- 2. Dreieck auf (x3, y2) zeichnen
- 3. Font 1 wählen
- 4. String „AB" bei (x1, y1) setzen
- 5. Font 2 wählen
- 6. String „C" auf (x4, y3) setzen
-
Die
entsprechende Seite, zusammen mit einer sortierten Display-Liste,
ist in 1 dargestellt. Wie dann ersichtlich ist, wird
die Display-Liste zunächst
nach y-Koordinate und dann, zweitens, nach x-Koordinate sortiert.
-
Eine
zweite Weise des Organisierens von Rasterisierungsanforderungen
beinhaltet das Unterteilen der Seite in Bänder wie in 2 gezeigt.
Für jedes
Band wird eine separate Display-Liste erstellt. Diese Technik sowie
die vorherige Technik sind sich dahingehend ähnlich, dass eine Seite als
ein langes Band angesehen werden kann. Die Display-Listen für Banden
können
jedoch kollektiv größer sein
als die Display-Liste für
eine volle Seite (da dasselbe Druckelement Bänder überlappen kann, was es erfordert,
dass es in jedem enthalten ist). Da die Größe der Display-Liste grundsätzlich unbegrenzt
ist, kann stattdessen eine Folge von Display-Listen erzeugt werden,
was mehrere Rasterisierungsdurchgänge über jedes Band erfordert. In
jedem Fall ist das resultierende Raster dasselbe.
-
Eine
dritte Weise des Organisierens von Rasterisierungsanforderungen
beinhaltet einfach das Erstellen eines unsortierten Satzes von Anforderungen.
Diese Organisationsweise (siehe 3) verlangt,
dass das Rasterisierungssystem eine wachsende Liste von zufällig zugängigen Abtastzeilen
führt.
Es wurden verschiedene Möglichkeiten
entwickelt, um Speicherplatz zu sparen, z. B. dadurch, dass nur
diejenigen Abtastzeilen zugewiesen werden, die tatsächlich benutzt
werden, und selbst rechteckige Patches des Rasters nach Bedarf zuzuweisen.
Im Prinzip muss der Rasterisierer jedoch Zugang zu einer vollen
Bitmap haben. Ein erheblicher Vorteil dieses Ansatzes besteht dann,
dass keine Display-Liste erstellt zu werden braucht.
-
Die
Speicherung eines einzelnen Vollfarbenbildes mit hoher Auflösung kann
Hunderte von Megabytes an Speicherkapazität erfordern. Um ein solches
Bild mit einem Farblaserdrucker auszudrucken, muss das gesamte Bild
gerendert und gleichzeitig in einem Speicher gespeichert werden,
um die Gefahr von Verzögerungen
beim Zuführen
von Bilddaten zur Druckmaschine (Unterlauf) zu vermeiden.
-
Diese
Anforderung des Laserdruckens bedeutet extreme Speicherkapazitäts- und
Speicherbandbreitenanforderungen für einen Vollfarblaserdrucker
mit hoher Auflösung.
Solche Drucker waren daher recht kostspielig. Im Stand der Technik
wird das gesamte Bild oder wenigstens ein Bildband rasterisiert
und gespeichert. Das gespeicherte, rasterisierte Bild oder Bildband
wird dann abgerufen und komprimiert. Schließlich wird das komprimierte
Bild oder Bildband zur späteren
Expandierung und Ausgabe zur Druckmaschine gespeichert. Infolgedessen
wird jedes Pixel des Bildes mehrere Male gehandhabt. Sowohl Speicherbedarf
als auch Speicherbandbreitenbedarf sind groß.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Die
vorliegende Erfindung reduziert, allgemein ausgedrückt, Speicherkapazitäts- und
Speicherbandbreitenanforderungen eines Farblaserdruckers (oder eines
anderen Druckers mit Echtzeit-Druckbeschränkungen),
indem Bildinformationen in einem komprimierten Format über den
gesamten Rendering-Prozess dargestellt werden. Zu jedem Zeitpunkt
während
des Rendering-Prozesses wird vorzugsweise nur eine einzige Abtastzeile
auf das volle, unkomprimierte Format expandiert, um schließlich ausgedruckt
zu werden. Die gerenderte Abtastzeile wird dann erneut komprimiert
und gespeichert. Wenn alle Abtastzeilen verarbeitet und im komprimierten
Format gespeichert sind, wird das gesamte Bild, der Reihe nach,
in Echtzeit expandiert und zum Drucker gesendet.
-
Die
Erfindung hält
die Bildinformationen vorzugsweise so lange wie möglich in
komprimierter Form, expandiert jeweils immer nur einen möglichst
kleinen Teil des Bildes (z. B. eine einzelne Abtastzeile) und lässt diesen
Teil des Bildes so kurz wie möglich
in expandierter Form, komprimiert ihn schnell neu und speichert
ihn. So werden Speicherkapazitäts-
und Speicherbandbreitenanforderungen stark verringert. Darüber hinaus kann,
da die Speicheranforderungen für
die unkomprimierten Raster so gering sind, ein extrem schnelles
Speicherverfahren verwendet werden, wodurch der Gesamtprozess weiter
beschleunigt wird, ohne dass dies die Kosten stark erhöhen würde.
-
Die
US-A-5 367 383 beschreibt ein Verfahren zum Verarbeiten von Bilddaten
in Fotokopiermaschinen. Die Bilddaten können in einem vollen Rasterseitenformat
vorliegen und es ist somit notwendig, einen ausreichenden Speicher
zum Handhaben einer vollen Rasterseite bereitzustellen.
-
Die
US-A-5 150 454 und die EP-A-0 473 341 beschreiben Systeme, in denen
eine gesamte Display-Liste gespeichert werden muss. Für die Seitendarstellung
repräsentative
Daten werden gemäß der EP-A-0
597 571 gespeichert, dann wird eine Mehrzahl von Algorithmen für die Kompression
verwendet.
-
Die
vorliegende Erfindung ist in den beiliegenden Ansprüchen dargelegt,
die gegen die US-A-5 150 454 abgegrenzt sind.
-
Gemäß einem
weiteren Aspekt der Erfindung werden alle Anforderungen auf einen äußerst einfachen Satz
von Operationen reduziert, die mit sehr kostenarmer Hardware oder
mit effizienten und leicht zu optimierenden Software-Prozeduren
implementiert werden können.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
Die
vorliegende Erfindung wird anhand der nachfolgenden Beschreibung
in Zusammenhang mit den beiliegenden Zeichnungen besser verständlich.
Dabei zeigt:
-
1 eine
Darstellung einer Seite und einer entsprechenden sortierten Display-Liste;
-
2 eine
Darstellung der Seite von 1, die in
Banden unterteilt ist;
-
3 eine
Darstellung eines unsortierten Satzes von Rasterisierungsanforderungen;
-
4 ein
verallgemeinertes Blockdiagramm, das die Umgebung der vorliegenden
Erfindung zeigt;
-
5 ein
Blockdiagramm einer Rendering-Vorrichtung, die in der vorliegenden
Erfindung zum Einsatz kommen kann;
-
6 ein
Diagramm, das zwei Hauptspeicherbereiche im Speicher 308 von 5 illustriert;
-
7 ein
Diagramm, das eine Befehlswarteschlangenstruktur innerhalb des Speicherbereichs 321 von 6 illustriert;
-
8 ein
Diagramm, das die Konvertierung von Farbanwendungen in Abtastoperationen
und die Einreihung von Abtastoperationen in die Warteschlange veranschaulicht;
-
9 ein
Blockdiagramm des Rasterisierers/Kompressors 306 von 5;
-
10 ein
Code-Segment, das zum Ausführen
eines Repeat-Befehls während
der Rasterisierungsphase im Rasterisierer/Kompressor 306 von 5 verwendet
werden kann;
-
11 ein
Code-Segment, das zum Ausführen
der Kompressionsphase im Rasterisierer/Kompressor 306 von 5 verwendet
werden kann;
-
12 ein
Blockdiagramm des Expanders 307 von 5;
-
13 ein
Code-Segment, das zum Ausführen
eines Repeat-Befehls im Expander 307 von 5 zum
Einsatz kommen kann; und
-
14 ein
Blockdiagramm der zweiten Schnittstellenschaltung von 5.
-
AUSFÜHRLICHE BESCHREIBUNG DER BEVORZUGTEN
AUSGESTALTUNGEN
-
Nunmehr
Bezug nehmend auf 4, ein Computer 100 und
eine Drucksteuervorrichtung 300 sind über eine erste Kommunikationsverbindung 180 miteinander
verbunden. Die Kommunikationsverbindung 180 kann ein Kabel
oder, allgemeiner, jede beliebige Art von Kommunikationsverbindung
sein, die digitale Informationen übertragen kann, ob von serieller
oder von paralleler Natur, wie zum Beispiel ein Netzwerk (verdrahtet oder
drahtlos, Punkt zu Punkt usw.). Die erste Kommunikationsverbindung 180 ist
mit einem externen Verbinder 101 des Computers 100 und
mit einer ersten Schnittstelle 301 der Drucksteuervorrichtung 300 gekoppelt. Die
Kommunikationsverbindung 180 führt Druckanweisungen zwischen
dem Computer 100 und der Drucksteuervorrichtung 300 aus.
Die Vorrichtung 300 ist über eine zweite Kommunikationsverbindung 190 auch
mit einem Drucker 200 (zum Beispiel einem Farblaserdrucker
eines bekannten Typs) verbunden. Die zweite Kommunikationsverbindung 190 ist
mit einem zweiten Schnittstellenverbinder 302 der Vorrichtung 300 und
mit einem Schnittstellenverbinder 201 des Druckers 200 gekoppelt.
Die Kommunikationsverbindung 190 überträgt Bilddaten und Steuerbefehle
von der Drucksteuervorrichtung 300 zum Drucker 200.
-
Der
Aufbau der Drucksteuervorrichtung 300 wird nachfolgend
ausführlicher
mit Bezug auf 5 beschrieben. In 5 ist
der erste Schnittstellenverbinder 301 zum Empfangen von
Daten vom Computer 100 mit einer ersten Schnittstellenschaltung 303 verbunden,
die die empfangenen Daten annimmt. Die erste Schnittstellenschaltung 303 ist
von einem in der Technik hinlänglich
bekannten Typ (z. B. RS 232 seriell, Centronics parallel
usw.) und wird hier nicht weiter beschrieben.
-
Das
andere Ende der ersten Schnittstellenschaltung ist mit einem Bus 313 gekoppelt,
der einen Datenaustausch zwischen den Schnittstellenschaltungen
und einer CPU 305 zulässt,
die mit einem Programm und einem Datenspeicher 304 verbunden
ist. Der Bus 313 ist auch mit einem Rasterisierer/Kompressor 306, einer
Expander-Schaltung 307, einem Speicher 308 und
einem DMAC (Direct Memory Access Controller) 314 verbunden.
Der DMAC 314 bewirkt eine direkte Speicherübertragung
zwischen den verschiedenen Geräten. Man
beachte, dass anstatt Programm und Datenspeicher 304 separat
bereitzustellen, auch der Speicher 308 für diesen
Zweck verwendet werden kann.
-
Die
zweite Schnittstellenschaltung 350 ist auf ihrer Eingangsseite über einen
Bus 315 mit dem Expander 307 und auf ihrer Ausgangsseite
mit dem Druckerschnittstellenverbinder 302 verbunden. Die
zweite Schnittstellenschaltung 350 wird ausführlicher
in Verbindung mit 14 beschrieben.
-
Der
Rasterisierer/Kompressor 306 beinhaltet wenigstens einen,
vorzugsweise zwei Puffer 309 und 311, die zum
vorübergehenden
Aufnehmen von expandierten Bilddaten verwendet werden. Die Puffer 309 und 311
sind der Deutlichkeit halber separat illustriert. Ebenso beinhaltet
der Expander 307 wenigstens einen Puffer 310 und,
bei Bedarf einen zusätzlichen
Puffer 312, der zum Aufnehmen von expandierten Bilddaten
dient, die zum Drucker ausgegeben werden sollen. Auch hier sind
die Puffer 310 und 312 der Deutlichkeit halber
wieder separat dargestellt.
-
Im
Allgemeinen beinhaltet der durch die Drucksteuervorrichtung 300 durchgeführte Bildrendering-Prozess
die folgende Reihe von Schritten:
- 1. eine Seitenbeschreibung
wird von einem Anwendungsprogramm (läuft auf dem Computer 100 in 4) in
einer Seitenbeschreibungssprache (PDL) wie z. B. Postscript empfangen;
- 2. von dem Anwendunsprogramm empfangene PDL-Befehle werden in
Rasterisierungsanforderungen interpretiert, die wiederum in eine
Reihe von Farbapplikationen gegliedert werden, die Graphikobjekte
in einem komprimierten Format darstellen;
- 3. diese Farbapplikationen werden nachfolgend in Abtastoperationen
konvertiert, die an Datenstrukturen angehängt werden, die ihre entsprechende
Abtastzeile repräsentieren;.
- 4. jede Abtastzeile wird nacheinander gerendert, um Rasterdaten
zu erzeugen, und wird dann komprimiert und gespeichert; und
- 5. wenn die gesamte Seite gerendert und komprimiert ist, dann
werden die komprimierten Rasterdaten expandiert und zum Drucker
gesendet (z. B. dem Farblaserdrucker 200 von 4).
-
Schritt 1 oben
(ein Programm, das eine Seitenbeschreibung ausgibt) ist hinlänglich bekannt.
Jeder der nachfolgenden Schritte wird ausführlicher beschrieben.
-
Zur
Erzielung von Kompatibilität
in verschiedenen PDLs müssen
von einer bestimmten PDL erzeugte Rasterisierungsanforderungen in
einen gemeinsamen Satz von Befehlen umgesetzt werden, die über eine Reihe
verschiedener PDLs verwendet werden können. Daher werden in dem derzeitigen
Drucker-Controller Rasterisierungsanforderungen weiter in eine kleine
Zahl von sehr einfachen Farbapplikationen gegliedert. So wird beispielsweise
in einer bevorzugten Ausgestaltung eine Form von Farbapplikation
für mehrfarbige
Applikationen verwendet, und eine andere Form von Farbapplikation
wird für
einfarbige Applikationen verwendet. Für mehrfarbige Applikationen
haben Farbapplikationsbefehle die folgende Form:
At<x, y>: <Color 1, n1><Color
2, n2> ...
-
Es
ist leicht verständlich,
dass der obige Befehl vorgibt, dass, beginnend an einem Punkt, der
durch die Koordinaten x und y ausgedrückt wird, eine Reihe von Pixeln
n1 in der x-Richtung auf eine erste Farbe, Color 1, eingestellt
wird, danach wird eine Reihe von Pixeln n2 auf eine zweite Farbe,
Color 2, eingestellt usw.
-
Für einfarbige
Applikationen bleibt die Farbe immer gleich. Daher haben Farbapplikationen
die folgende Form:
At<x,
y>: Color<paint n1><skip n2><paint
n3> ...
-
Es
ist leicht verständlich,
dass die obige Applikation vorgibt, dass, beginnend an einem Punkt,
der durch die Koordinaten x und y ausgedrückt wird, eine Reihe von Pixeln
n1 in der x-Richtung auf die vorgegebene Farbe eingestellt wird,
danach wird eine Reihe von Pixeln n2 übersprungen (d. h. in dem Farbzustand gelassen,
in dem sie waren), danach wird eine Reihe von Pixeln n3 in der x-Richtung
auf die vorgegebene Farbe eingestellt, usw.
-
Rasterisierungsanforderungen
(vom PDL-Interpreter erzeugt) werden verarbeitet und mit einem Satz von
einfachen Routinen in Farbapplikationen gegliedert, während die
Rasterisierungsanforderungen vom PDL-Interpreter empfangen werden.
Die spezifischen Routinen, die zum Durchführen dieser Gliederung verwendet
werden, liegen durchaus im Kompetenzbereich der Fachperson und werden
daher hier nicht näher
beschrieben.
-
Während des
Erzeugens von Farbapplikationen werden diese in Abtastoperationen
eines nachfolgend ausführlich
beschriebenen Typs produziert und gemäß einem Organisationsschema,
wie zum Beispiel einem der zuvor beschriebenen Organisationsschemata,
in eine Warteschlange eingereiht. Das heißt, die derzeitige Rendering-Technik
kann durch Einrichten der Abtastoperationen mit einem der verschiedenen
konventionellen Verfahren des Einrichtens des Rasterisierungsprozesses
angewendet werden, einschließlich
der mit Bezug auf 1, 2 und 3 beschriebenen.
Das Konvertieren von Farbapplikationen in Rasterisierungsbefehle
erfolgt wiederum mit sehr einfachen Routinen, die durchaus im Kompetenzbereich
jeder Fachperson liegen. Ein Beispiel für eine solche Konvertierung
wird nachfolgend in Verbindung mit 8 beschrieben.
-
Abtastoperationen
repräsentieren
das Bild, das durch die PDL-Rasterisierungsanforderungen in einem
komprimierten Format beschrieben wird. Ferner wird die komprimierte
Darstellung des Bildes erzeugt, ohne zunächst das Bild zu expandieren
oder einen Teil des Bildes zu rendern.
-
Bezug
nehmend auf 6, in einer bevorzugten Ausgestaltung
werden Abtastoperationen in einer Warteschlangenstruktur in einem
Bereich 321 des Speichers 308 gespeichert. Ein
separater Bereich des Speichers 323 wird zum Speichern
von komprimierten Rasterdaten verwendet, die von dem nachfolgend
beschriebenen Rasterisierer/Kompressor 306 erzeugt werden.
Beide Arrays 321 und 323 können dynamisch im Speicher 308 zugewiesen
werden (anstatt eine feste Zuweisung für jede einzelne zu führen). Ferner
kann der Speicher 308 eine Warteschlange der komprimierten
Rasterdaten für
so viele Seiten enthalten, wie hinein passen.
-
Innerhalb
des Speicherbereiches 321 werden Abtastoperationen auf
eine in 7 illustrierte Weise organisiert.
Ein Abtastzeilenindex 341 bildet den Kopf einer Reihe von
verknüpften
Listen oder Warteschlangen. Während
Abtastoperationen erzeugt werden (als Reaktion auf Rasterisierungsanforderungen),
werden die Abtastoperationen an den letzten Rasterisierungsblock
für deren
Abtastzeile erzeugt. Somit werden Abtastoperationen nach y-Koordinate
sortiert, aber ansonsten in Rendering-Anforderungsreihenfolge gespeichert. Das
Speichern der Abtastoperationen in Rendering-Anforderungsreihenfolge gewährleistet,
dass die letztendlich ausgedruckte Seite dieselbe ist wie die von
der PDL-Quelle beschriebene Seite.
-
Die
Abtastoperationen-Warteschlangen werden zum Rendern und nachfolgenden
Komprimieren jeder Abtastzeile nacheinander verwendet, um komprimierte
Rasterdaten zu erzeugen, die im Bereich 323 im Speicher 308 gespeichert
werden. Der Rasterisierungsprozess wird gestartet entweder 1) wenn
eine Seite fertig ist oder 2) wenn keine Speicherkapazität mehr für Rasterisierungsblöcke vorhanden
ist (im Bereich 321 im Speicher 308).
-
Der
Einfachheit halber geht die vorliegende Beschreibung davon aus,
dass im Bereich 323 des Speichers 308 genügend Speicherkapazität zum Speichern
von komprimierten Rasterdaten für
eine gesamte Seite zur Verfügung
steht. Im Falle eines typisches Bildes wird eine signifikante Kompression
des Bildes erzielt, so dass der Bereich 323 des Speichers 308 viel
kleiner sein kann als eine Vollseiten-Bitmap. Im Extremfall wird jedoch
(wo die Entropie des Quellbildes sehr hoch ist) wenig oder keine
Kompression erzielt. Wenn der Speicherbereich 323 des Speichers 308 kleiner
ist als eine Vollseiten-Bitmap, dann kann der Printer-Controller 300 die
Seite möglicherweise
nicht mit verlustfreien Kompressionstechniken rendern. Dieser Fall
kann dadurch berücksichtigt
werden, dass 1) Quellbilder mit ungewöhnlich hoher Entropie nicht
gerendert werden, sondern dass stattdessen ein Fehlerzustand signalisiert
wird; 2) eine Vollseiten-Bitmap erstellt wird, so dass die potenzielle
Reduzierung der Speicheranforderungen zu Gunsten der Möglichkeit
geopfert wird, ein willkürliches
Bild zu rendern; oder 3) das Bild mit verlustbehafteten Kompressionstechniken
(im Stand der Technik bekannt und beschrieben) auf eine Größe komprimiert
wird, die in den Bereich 323 des Speichers 308 passt.
-
Der
Rasterisierer/Kompressor 306 von 5 arbeitet
in zwei Phasen, einer Rasterisierungsphase und einer Kompressionsphase.
Während
der Rasterisierungsphase werden für eine bestimmte Abtastzeile
in der Warteschlange befindliche Abtastoperationen durch den Rasterisierer
ausgeführt,
um Rasterdaten zu erzeugen. Während
einer Kompressionsphase werden die Rasterdaten zurück in dasselbe
komprimierte Format komprimiert wie die Abtastoperationen und im
Speicher gespeichert. Wenn die Rasterisierung für alle Abtastzeilen vollendet
ist, dann werden die gespeicherten, komprimierten Rasterdaten Abtastzeile
für Abtastzeile
expandiert und zum Drucker ausgegeben.
-
Da
die Rasterdaten zurück
in dasselbe komprimierte Format komprimiert werden wie die ursprünglichen
Abtastoperationen, können
der Rasterisiererteil des Rasterisierers/Kompressors 306 und
der Expander 307 größtenteils
Abtastoperationen im selben Format verwenden und können beide
auf ähnliche
Weise implementiert werden. In einer beispielhaften Ausgestaltung
beinhalten vom Rasterisierer 306 und vom Expander 307 verwendete
Abtastoperationen Folgendes:
-
-
Es
gibt ein paar wichtige Unterscheidungsmerkmale zwischen dem Betrieb
des Rasterisierers und dem Betrieb des Expanders. Zunächst empfängt der
Rasterisierer Abtastoperationen strikt in Abtastzeilenfolge aufgrund
der vorherigen Operationen des Rasterisierers. Zweitens gibt der
Expander die expandierten Rasterdaten direkt zu einer Ausgabe-Pipeline,
von der die Daten von der Druckmaschine verbraucht werden. Der Rasterisierer
berechnet andererseits eine Abtastzeile, aber anstatt die Abtastzeile
zur Ausgabe-Pipeline auszugeben, komprimiert er die Abtastzeile
erneut und speichert sie zur späteren
Expansion. Ferner empfängt
der Rasterisierer Abtastoperationen nicht in Abtastzeilenfolge,
sondern in Rasterisierungsanforderungsfolge. Aufgabe des Rasterisierers
ist es, Pixel zu unterschiedlichen Zeiten zu manipulieren, möglicherweise
in der gesamten Abtastzeile, so dass eine Abtastzeilendarstellung
entsteht, die der kumulative Effekt aller in der richtigen Reihenfolge
ausgeführten
Befehle ist.
-
So
kann beispielsweise zum Bilden eines Schattenrandes eine Box aus
einer ersten Farbe gezeichnet, aber dann zurück in eine Box mit einem Füllmuster
einer zweiten Farbe gesetzt werden. In einer bestimmten Abtastzeile
kann ein String von Pixeln infolgedessen zunächst auf die erste Farbe und
danach auf die zweite Farbe gesetzt werden. Daher verwendet der
Rasterisierer 306, zusätzlich
zu den vorherigen Abtastoperationen, die folgenden Befehle, die
nicht vom Expander 307 verwendet werden, um die Position
in einer Abtastzeile zu ändern:
-
-
Man
beachte jedoch, dass die tatsächlich
verwendete Abtastoperationscodierung variieren kann. So könnte beispielsweise
eine Huffman-Codierung oder eine Variante davon angewendet werden,
um die obigen Operationen effizient zu codieren.
-
Der
Prozess, mit dem Rasterisierungsanforderungen empfangen und in Farbapplikationen
und wiederum in die vorherigen Abtastoperationen umgesetzt werden,
die dann in eine Warteschlange eingereiht werden, wird mit Bezug
auf 8 besser verständlich.
Es wird angenommen, dass eine typische Rasterisierungsanforderung
die Form At (x0, y0),
COMMAND hat, wobei REQUEST eine der zuvor beschriebenen Anforderungen
RAST1, RAST2 und RAST3 ist. Die Koordinate y0 wird
benutzt, um zu ermitteln, wo die umgesetzten Abtastoperationen in
die Warteschlange eingereiht werden sollen. Die umgesetzten Abtastoperationen
beeinflussen die Abtastzeile y0, y0 + 1, ..., y0 +
h – 1,
wobei h die Höhe
des mit der Rasterisierungsanforderung assoziierten Objekts ist.
Eine die Abtastzeile y beeinflussende Abtastoperation wird in die
Warteschlange zum letzten Rasterisierungsblock für Abtastzeile y eingereiht.
-
Es
werden zwei mögliche
Szenarios illustriert. Entweder erfordert der COMMAND die Applikation
von nur einer einzigen Farbe, und in diesem Fall wird sie in eine
Reihe von Single Color Farbapplikationen umgesetzt, oder sie verlangt
die Applikation von mehreren Farben, und in diesem Fall wird sie
in eine Reihe von Multi-Color Farbapplikationen umgesetzt. Diese
Farbapplikationen werden dann in die vorherigen Abtastoperationen
umgesetzt. In beiden Fällen
ist die erste Abtastoperation eine Set x Abtastoperation, die zum
Setzen der x-Koordinate auf den Wert x0 verwendet
wird.
-
Man
wird sich erinnern, dass für
mehrfarbige Anwendungen Farbapplikationen die folgende Form haben:
[Color
1, n1][Color 2, n2] ...
wobei die eckigen Klammern dazu dienen,
Farbapplikationen von Abtastoperationen zu unterscheiden. Wie in 8 ersichtlich
ist, wird jede Multi-Color Applikation in eine Folge von Paaren
von Abtastoperationen umgesetzt, wobei jedes Paar einer der obigen
Klammern entspricht. Für
jedes Feld [Color, n] wird eine Set Color Abtastoperation verwendet,
um die Farbe auf die angeforderte Farbe einzustellen, und es wird
eine zweite Repeat-Abtastoperation verwendet, um diese Farbe mit
der geeigneten Häufigkeit
zu wiederholen. Die Set Color Abtastoperation selbst bewirkt eine
Applikation der Farbe auf einen Punkt. Die Repeat-Abtastoperation
gibt somit einen Wert vor, der um eins geringer ist als der der
entsprechenden Farbapplikation.
-
Single
Color Befehle haben, wie zuvor bemerkt, die folgende Form:
Color<paint n1><skip n2><paint
n2> ...
-
Die
Anwendung übersetzt
zunächst
in eine Set Color Abtastoperation, um die Farbe auf die angeforderte
Farbe einzustellen. Als Nächstes
wird mit Hilfe einer Repeat-Abtastoperation die Farbe mit der geeigneten
Häufigkeit
wiederholt. Skip-Felder werden in Skip-Abtastoperationen umgesetzt.
Dann werden weitere Repeat- und Skip-Abtastoperationen verwendet,
um die vorgegebene Farbe selektiv auf verschiedene Pixel und Pixelgruppen
in der gesamten Abtastzeile zu applizieren.
-
9 zeigt
eine beispielhafte Implementation des Rasterisierers/Kompressors
306. Man beachte jedoch, dass auch andere Implementationen des Rasterisierers/Kompressors
möglich
sind, zum Beispiel solche, die auf einer lauflängencodierten Version der Abtastzeile
anstatt auf der hier präsentierten
Pixelarray-basierten Version basieren. In dem Rasterisierer/Kompressor 306 von 9 ist
eine Steuerschaltung 501 mit dem Bus 313 verbunden
und empfängt
eine Folge von eine Abtastzeile beschreibenden Abtastoperationen
von dem Bus 313, wobei jede Abtastoperation eine der vorherigen
Abtastoperationen ist. Die Steuerschaltung 501 ist auch
mit einem X-Register 503, einem Farbregister 505,
einem StringFlag-Register 507, einem Längenregister 509 und
einem Ausgaberegister 511 verbunden. Das X-Register 503 und
das Farbregister 505 sind jeweils mit einem Speicher 400,
einem Adresseingang und einem Dateneingang des Speichers 400 verbunden.
-
Der
Speicher 400 dient zum Aufnehmen der in 5 gezeigten
beiden Abtastzeilenanays 309 und 311. Jeder Ort
in den Abtastzeilenanays enthält
die Farbe für
ein Pixel der Abtastzeile, und jede Array hat eine Reihe von Stellen,
die der Zahl der Pixel in einer Abtastzeile n entspricht, wobei
die Pixel durch den Wert von X indexiert werden. Eine der Abtastzeilenarrays
enthält
Daten für
die aktuelle Abtastzeile, die andere Abtastzeilenarray enthält Daten
für die
vorherige Abtastzeile. Da Daten in der aktuellen Abtastzeile häufig Daten
in der vorherigen Abtastzeile stark ähneln, erlaubt diese Anordnung
die Erzielung eines hohen Grades an Kompression. In einer anderen
Anordnung, in der Kompression keine Frage ist oder anders erzielt
wird, ist möglicherweise
nur eine Abtastzeilenarray erforderlich.
-
Am
Ende der Verarbeitung jeder Abtastzeile werden die Rollen der Abtastzeilenarrays 309 und 311 vertauscht,
so dass was die aktuelle Abtastzeilenarray C war, jetzt zur vorherigen
Abtastzeilenarray wird, und was die vorherige Abtastzeilenarray
P war, jetzt als die aktuelle Abtastzeilenarray verwendet wird.
-
Die
oben allgemein beschriebenen vorherigen Abtastoperationen werden
nun im Sinne ihrer Ausführungsschritte
erläutert,
und zwar wie folgt:
-
-
Die
Repeat-Abtastoperation wird durch eine in 10 beschriebene
Reihe von Schritten ausgeführt. Wenn
die Repeat-Abtastoperation ausgeführt wird, dann wurde der StringFlag 507 zuvor
auf falsch (false) gesetzt, wenn die nächstvorherige Abtastoperation
eine Set Color Abtastoperation oder eine Copy Color Abtastoperation
war, oder auf wahr (true), wenn die nächstvorherige Abtastoperation
eine Copy String Abtastoperation war. Das Längenregister 509 wird
auf die Repeat-Länge
RepLg gesetzt und nach jedem Durchgang durch eine Code-Schleife
dekrementiert. Bei jedem Durchgang wird, wenn StringFlag wahr ist,
die Farbe an Stelle x in der vorherigen Abtastzeilenanay auf das
Farbregister 505 kopiert, von dem es dann auf die Stelle
x in der aktuellen Abtastzeilenanay kopiert wird. Dann wird der
Wert von x inkrementiert und das Längenregister 509 dekrementiert.
Wenn StringFlag 507 falsch ist, dann wird der Inhalt des
Color Register einfach einmal für
jede Repeat-Abtastoperation wiederholt.
-
Wenn
eine End of Line Abtastoperation auftritt, dann ist die Rasterisierung
der aktuellen Abtastzeile abgeschlossen und die Abtastzeile ist
zur Rekompression bereit. Die bei der Kompression ausgeführten Schritte
werden in 11 beschrieben. Der Ausgang
der Kompressionsphase ist eine Reihe von Abtastoperationen, die
die rasterisierte Abtastzeile beschreiben. Diese Abtastoperationen
werden in einer jeweiligen Abtastzeilenwarteschlange im komprimierten
Rasterdatenbereich 323 (6) des Speichers 308 gespeichert.
-
Mit
Bezug auf 11, der Kompressor beginnt mit
der Kompression am Anfang der Abtastzeile durch Einstellen des Indexwertes
x auf null. Die Farbe der aktuellen Abtastzeile am Indexwert und
die Farbe der vorherigen Abtastzeile am selben Indexwert werden
dann in dem Bemühen
verglichen, einen ersten Lauftyp zu identifizieren, in dem die Farbe
von Pixel zu Pixel variiert, aber auf dieselbe Weise variiert wie
eine in der vorherigen Abtastzeile. Wenn eine Identität gefunden
wird, dann wird der StringFlag 507 auf wahr gesetzt; ansonsten
wird die Set Color Abtastoperation ausgegeben. Die Farbe des aktuellen
Pixels wird im Farbregister 505 gespeichert. Das Speichern
der Farbe des aktuellen Pixels im Farbregister ermöglicht die
Identifikation von Durchläufen
eines zweiten Typs, in dem die Farbe von Pixel zu Pixel gleich bleibt.
-
Als
Nächstes
wird die Länge
jedes Durchlaufs festgestellt. Für
jede der Schleifen 1–4 in 11 wird jedes
Mal, wenn die Farben in einem Durchlauf eine bestimmte Bedingung
erfüllen,
das Längenregister 509 (anfangs
auf null gesetzt) inkrementiert. Das X-Register 503 wird
ebenso inkrementiert.
-
Es
gibt zwei Typen von Durchläufen.
Das heißt,
Pixel x bis x + n in der vorherigen Abtastzeile können alle
von einer bestimmten Farbe sein, und Pixel x bis x + n in der aktuellen
Abtastzeile können
alle von derselben Farbe sein. Wenn Pixel x + n + 1 in der aktuellen
Abtastzeile von einer anderen Farbe als sowohl Pixel x + n + 1 in
der vorherigen Abtastzeile als auch Pixel x + n in der aktuellen
Abtastzeile ist, dann ist es egal, welcher Durchlauf gewählt wird.
In der Routine von 11 wurde willkürlich der
erste Durchlauftyp gewählt (Schleife 1).
Wenn jedoch Pixel x + n + 1 in der aktuellen Abtastzeile von derselben
Farbe ist wie Pixel x + n + 1 in der vorherigen Abtastzeile, dann
kann der erste Durchlauftyp erweitert werden und die Kompression
wird erhöht,
indem der längere
erste Durchlauftyp anstatt des kürzeren
zweiten Durchlauftyps (Schleife 2) gewählt wird. Ebenso kann, wenn
Pixel x + n + 1 in der aktuellen Abtastzeile von derselben Farbe
ist wie Pixel x + n in der aktuellen Abtastzeile, dann kann der
zweite Durchlauftyp erweitert werden und die Kompression wird dadurch
erhöht,
dass der längere
zweite Durchlauftyp anstatt des kürzeren ersten Durchlauftyps
gewählt
wird (Schleife 3). Wenn kein Durchlauf des ersten und zweiten
Typs oder nur des ersten Typs gefunden wird, dann muss nur noch
ermittelt werden, ob ein Durchlauf nur des zweiten Typs gefunden
werden kann (Schleife 4).
-
Wenn
also StringFlag wahr ist, was bedeutet, dass das aktuelle Pixel
dieselbe Farbe hat wie das entsprechende Pixel in der vorherigen
Abtastzeile, dann wird zuerst die Länge eines Durchlaufs beider
Typen (dieselbe Farbe und auch gleich dem entsprechenden Durchlauf
in der vorherigen Zeile) durch Schleife 1 festgestellt.
Danach wird der Durchlauf erweitert, wenn dies möglich ist. Schleife 2 prüft, ob er
zu einem längeren Durchlauf
von Farben erweitert werden kann, die mit der vorherigen Abtastzeile
identisch sind. Wenn Schleife 2 erfolgreich ist, dann wird
eine Copy String Abtastoperation erzeugt. Schleife 3 versucht,
ihn auf einen Lauf derselben Farbe zu erweitern. Wenn Schleife 3 erfolgreich
ist, dann wird eine Copy Color Abtastoperation erzeugt.
-
Wenn
StringFlag falsch ist, dann wird die Länge des zweiten Durchlauftyps
(aber beginnend mit einer Farbe, die sich von der in der vorherigen
Abtastzeile unterscheidet) durch Prüfen der Identität der Farben
nachfolgender Pixel in der aktuellen Abtastzeile mit der im Farbregister 505 gespeicherten
Farbe festgestellt. Dies erfolgt durch Schleife 4. Auch
hier werden wieder immer dann, wenn die Farben gleich sind, das
Längenregister 509 und
das X-Register 503 beide inkrementiert.
-
Es
wird eventuell kein Durchlauf von einem dieser Typen gefunden, und
in diesem Fall bleibt die im Längenregister 509 gespeicherte
Länge null.
In diesem Fall wurde x bereits inkrementiert und die vorherigen Operationen
werden wiederholt. Wurde ein Durchlauf gefunden, dann wird eine
Repeat-Abtastoperation
mit der Länge
des Durchlaufs ausgegeben, und die vorherigen Operationen werden
mit dem neuen x-Wert wiederholt. Nach dem Verarbeiten des letzten
Pixels wird eine End of Line Abtastoperation ausgegeben, und die Register
werden für
die nächste
Abtastzeile zurückgesetzt.
Wenn alle Abtastzeilen rasterisiert und komprimiert sind, dann kann
das komprimierte Bild vom Expander 307 expandiert und zur
Druckmaschine ausgegeben werden.
-
Man
beachte, dass, wenn eine Abtastzeile in der Abtastzeilenarray 400 platziert
ist, es für
Kompressionszwecke unerheblich ist, wo diese Abtastzeile herkommt
oder wie sie gerendert wurde. Die identische Kompressionshardware
oder -software kann daher in Verbindung mit jedem Rasterisierer
verwendet werden. So ist zum Beispiel in einigen Fällen die
Markierungsschnittstelle einer bestimmten proprietären PDL
vielleicht nicht zugängig,
aber das rasterisierte Bild kann zugängig sein, während es
erzeugt wird. Das rasterisierte Bild kann nebenbei komprimiert werden,
wodurch die Notwendigkeit entfällt,
das gesamte Rasterbild zu speichern.
-
12 zeigt
eine beispielhafte Implementation des Expanders 307. Der
Expander kann auf eine Weise implementiert werden, die dem Rasterisierer/Kompressor
sehr ähnlich
ist. Eine Steuerschaltung 701 ist mit dem Bus 313 verbunden
und empfängt
eine Folge von Abtastoperationen von dem Bus 313, die eine
Abtastzeile beschreiben, wobei jede Abtastoperation eine aus den
vorherigen Expansions-Abtastoperationen ist. Die Steuerschaltung 701 ist
auch mit einem X-Register 703, einem Farbregister 705,
einem StringFlag-Register 707,
einem Längenregister 709 und
einem Ausgaberegister 711 verbunden. Das X-Register 703 und
das Farbregister 705 sind jeweils mit einem Speicher 500,
mit einem Adresseingang und einem Dateneingang des Speichers 500 verbunden.
-
Der
Speicher 500 dient zur Aufnahme von Daten für die aktuelle
sowie die vorherige Abtastzeile. Dieser Speicher speichert insbesondere
die aktuelle Abtastzeile bis zum Zugriff auf das aktuelle Pixel
(X-Register 703)
und den Inhalt der vorherigen Abtastzeile zwischen dem aktuellen
Pixel und dem Ende der Abtastzeile. Die beiden Abtastzeilen könnten natürlich auch
in ihrer Gesamtheit in zwei Puffern gespeichert werden, die in einer
Pingpong-Weise verwendet werden.
-
Die
oben allgemein beschriebenen vorangegangenen Expansions-Abtastoperationen
können
jetzt im Sinne ihrer Ausführungsschritte
spezifiziert werden, und zwar wie folgt:
-
-
Die
Ausführungsschritte
für die
Abtastoperationen im Expander sind größtenteils dieselben wie die Ausführungsschritte
für die
entsprechenden Operationen im Rasterisierer, mit geringfügigen Variationen.
Die von dem Expander für
die Repeat-Abtastoperation ausgeführten Ausführungsschritte sind in 13 beschrieben
und sind größtenteils
dieselben wie die Ausführungsschritte
für die
in 10 beschriebene entsprechende Rasterisierungs-Repeat-Abtastoperation,
wiederum mit geringfügigen
Variationen, die nicht näher
beschrieben werden.
-
Wie
zuvor erwähnt,
gibt der Expander die expandierten Rasterdaten direkt zu einer Ausgangs-Pipeline aus, von
der die Daten von der Druckmaschine verbraucht werden. In vielen
Fällen
stellt der Drucker selbst die Ausgabe-Pipeline dar und fordert vom
Expander die aufeinander folgenden Pixelwerte gemäß Synchronisationssignalen
an, die von der Ausgabe-Pipeline erzeugt werden. Alternativ kann
sich die Ausgabedaten-Pipeline in der zweiten Schnittstellenschaltung 350 von 5 befinden
und kann von einem in der Technik bekannten Typ sein, der in 14 ausführlicher
dargestellt ist. Der Dateneingang eines FIFO-Speichers 351 ist
mit dem Bus 313 verbunden. Über den Bus 313 erhält der Speicher 351 Daten
von der CPU 305 oder vom DMAC 314. Der Datenausgang
des FIFO-Speichers 351 ist mit einem Treiber 352 zum
Ausgeben von Daten zum zweiten Schnittstellenverbinder 302 verbunden.
Ein Empfänger 253 ist
vorgesehen, um ein Bereitschaftssignal 358 vom zweiten
Schnittstellenverbinder 302 weiter zu einer Steuerschaltung 354 zu
leiten. Die Steuerschaltung 354 erzeugt ein Lesesignal 359,
das zum FIFO-Speicher 351 geleitet wird, und ein Datentaktsignal 356,
das durch den Treiber 352 zum zweiten Schnittstellenverbinder 302 übertragen
wird. Die Synchronisierung der Steuerschaltung 354 wird
mit einem Taktsignal 360 gesteuert, das von einer Takterzeugungsschaltung 355 generiert
wird. Ein Leer-Flag-Signal 357 des FIFO-Speichers 351 wird
in die Steuerschaltung 354 eingegeben.
-
Die
Ausgabe-Pipeline von 14 kann auch modifiziert werden,
um auf eine in der Technik bekannte Weise einen Rand zu erzeugen,
um weißen
Raum bis zum Erreichen des ganz linken Pixels der Abtastzeile in den
Drucker zu speisen und um weißen
Raum hinter dem ganz rechten Pixel der Abtastzeile in den Drucker zu
speisen.
-
In
der vorangegangenen Anordnung werden die eigentlichen Pixel des
Bildes (während
der Rasterisierung) von Abtastoperationen erzeugt, die nach Abtastzeile
sortiert, aber nicht in der Abtastzeile geordnet sind, und dienen
auch zum Erzeugen (während
der Kompression) von Abtastoperationen, die sowohl nach Abtastzeile
sortiert als auch in der Abtastzeile eingeordnet sind, wobei der
Zustand jedes Pixels durch einen einzigen Befehl definiert wird.
Die Darstellung der Pixel im komprimierten Format ist weitaus kompakter
als die Pixel selbst, wodurch Speicheranforderungen reduziert werden.
Ferner werden die eigentlichen Pixel selbst nur einmal gehandhabt,
und zwar während
des Expansionsprozesses. Infolgedessen werden Verarbeitungsbandbreitenanforderungen
drastisch reduziert, und die Gesamtverarbeitungszeit kann durch
die tatsächliche Breite
der Abtastzeile (multipliziert mit einer geeigneten Konstante) begrenzt
werden, wodurch die Anforderung erfüllt wird, die Abtastzeile schnell
genug zu verarbeiten, um Pixel in Echtzeit zum Drucker zu übertragen.
-
Ebenso
kann gemäß der obigen
Anordnung, weil ein einzelner Kern von einfachen Operationen für Rasterisierung/Kompression
und spätere
Expansion verwendet werden kann, Hardware entwickelt werden, die
die benötigten
einfachen Operationen mit sehr hoher Geschwindigkeit durchführt, wodurch
hohe Druckgeschwindigkeiten erzielt werden. Dieselbe Hardware kann
nicht nur zum Beschleunigen der Rasterisierung und zum Ermöglichen
eines gleichzeitigen Betriebs der CPU, sondern auch rein nur für Kompressionszwecke
verwendet werden, wenn der Rasterisierungsprozess bereits fixiert
ist. Wenn beispielsweise die Markierungsschnittstelle einer bestimmten
PDL proprietär
und nicht zugängig
ist, aber das rasterisierte Bild zugängig ist, während es erzeugt wird, kann
das rasterisierte Bild nebenbei komprimiert werden, so dass die
Notwendigkeit entfällt,
das gesamte Rasterbild zu speichern. Dieselben Vorzüge wie oben
beschrieben werden auch in diesem Fall erzielt, mit der Ausnahme,
dass die Rasterisierung langsamer sein kann, wodurch die Druckgeschwindigkeit
begrenzt wird.
-
Die
Fachperson wird verstehen, dass die vorliegende Erfindung auch in
anderen spezifischen Formen ausgestaltet werden kann. Die derzeit
offenbarten Ausgestaltungen werden daher in jeder Hinsicht als illustrativ
und nicht einschränkend
angesehen. Der Umfang der Erfindung wird durch die beiliegenden
Ansprüche
und nicht durch die vorangegangene Beschreibung definiert.