DE69206796T2 - Digitale dokumentenvergroesserungsvorrichtung - Google Patents
Digitale dokumentenvergroesserungsvorrichtungInfo
- Publication number
- DE69206796T2 DE69206796T2 DE69206796T DE69206796T DE69206796T2 DE 69206796 T2 DE69206796 T2 DE 69206796T2 DE 69206796 T DE69206796 T DE 69206796T DE 69206796 T DE69206796 T DE 69206796T DE 69206796 T2 DE69206796 T2 DE 69206796T2
- Authority
- DE
- Germany
- Prior art keywords
- display
- text
- grid
- page
- image
- 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 - Fee Related
Links
- 239000000872 buffer Substances 0.000 claims description 196
- 230000015654 memory Effects 0.000 claims description 70
- 230000008030 elimination Effects 0.000 claims 1
- 238000003379 elimination reaction Methods 0.000 claims 1
- 230000006870 function Effects 0.000 description 107
- 238000000034 method Methods 0.000 description 54
- 230000033001 locomotion Effects 0.000 description 36
- 230000000694 effects Effects 0.000 description 29
- 239000000945 filler Substances 0.000 description 29
- 230000008569 process Effects 0.000 description 28
- 238000012545 processing Methods 0.000 description 21
- 238000013519 translation Methods 0.000 description 16
- 238000013507 mapping Methods 0.000 description 15
- 238000012546 transfer Methods 0.000 description 13
- 238000004458 analytical method Methods 0.000 description 11
- 238000007726 management method Methods 0.000 description 11
- 239000000463 material Substances 0.000 description 11
- 239000000470 constituent Substances 0.000 description 10
- 239000011159 matrix material Substances 0.000 description 10
- 230000009467 reduction Effects 0.000 description 10
- 230000009466 transformation Effects 0.000 description 9
- 238000006243 chemical reaction Methods 0.000 description 8
- 230000001771 impaired effect Effects 0.000 description 8
- 230000003287 optical effect Effects 0.000 description 8
- 230000002441 reversible effect Effects 0.000 description 7
- 238000003860 storage Methods 0.000 description 7
- 230000000903 blocking effect Effects 0.000 description 6
- 238000009499 grossing Methods 0.000 description 6
- 230000000873 masking effect Effects 0.000 description 6
- 230000008520 organization Effects 0.000 description 6
- 238000004091 panning Methods 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 5
- 239000011521 glass Substances 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 238000010276 construction Methods 0.000 description 4
- 230000001934 delay Effects 0.000 description 4
- 230000004438 eyesight Effects 0.000 description 4
- 201000004569 Blindness Diseases 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 238000001914 filtration Methods 0.000 description 3
- 238000005192 partition Methods 0.000 description 3
- 238000005096 rolling process Methods 0.000 description 3
- 238000000844 transformation Methods 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 230000004393 visual impairment Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000011049 filling Methods 0.000 description 2
- 235000013305 food Nutrition 0.000 description 2
- 238000013467 fragmentation Methods 0.000 description 2
- 238000006062 fragmentation reaction Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000011068 loading method Methods 0.000 description 2
- 238000012015 optical character recognition Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 208000029257 vision disease Diseases 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 208000010415 Low Vision Diseases 0.000 description 1
- 206010047571 Visual impairment Diseases 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000007630 basic procedure Methods 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000013481 data capture Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 239000006185 dispersion Substances 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000007274 generation of a signal involved in cell-cell signaling Effects 0.000 description 1
- 230000012010 growth Effects 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 238000003706 image smoothing Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000005304 joining Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 230000004303 low vision Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 230000003134 recirculating effect Effects 0.000 description 1
- 230000008521 reorganization Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 238000004513 sizing Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/34—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators for rolling or scrolling
- G09G5/346—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators for rolling or scrolling for systems having a bit-mapped display memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T3/00—Geometric image transformations in the plane of the image
- G06T3/40—Scaling of whole images or parts thereof, e.g. expanding or contracting
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Controls And Circuits For Display Device (AREA)
- Image Processing (AREA)
- Graft Or Block Polymers (AREA)
- Lubrication Of Internal Combustion Engines (AREA)
- Holo Graphy (AREA)
Description
- Die Erfindung kam mit Unterstützung der US-Regierung unter SBIR R44 EY-07816, vergeben vom Nationalen Gesundheitsamt, zustande. Die US-Regierung hat gewisse Rechte an der Erfindung.
- Die Erfindung betrifft ein System zum vergrößern gedruckter Materialien. Insbesondere betrifft die Erfindung ein System, in dem gedrucktes Material für Dokumente durch einen Mikroprozessor digitalisiert und verarbeitet und anschließend zum Betrachten angezeigt wird.
- Personen mit schlechtem Augenlicht haben oft Schwierigkeiten, gedrucktes Material, z. B. Bücher und Zeitschriften, zu lesen. Auch andere Arten von gedrucktem Material, z. B. Etiketten von Lebensmittelprodukten, bereiten Patienten mit geringer Sehkraft Schwierigkeiten.
- Vorrichtungen, die zum Vergrößern von gedrucktem Material verwendet werden können, wiren nützlich, um Patienten mit schlechtem Sehvermögen beim Lesen gedruckter Dokumente zu unterstützen. Zu gegenwärtig vorhandenen Vorrichtungen zum Vergrößern gedruckter Materialien gehören optische Vergrößerungsvorrichtungen, Vergrsßerungsvorrichtungen für Kabelfernsehen (CCTV-Vergrößerungsvorrichtungen) und Computervergrößerungsvorrichtungen, die zusammen mit Vorrichtungen zur optischen Zeichenerkennung verwendet werden. Diese Vorrichtungen haben jedoch mehrere Nachteile. Beispielsweise führen optische Vergrößerungsvorrichtungen zu angespannter Körperhaltung und Ermüdung infolge kurzer Betrachtungsabstände. CCTV-Vergrößerungsvorrichtungen erfordern eine umfangreiche, genaue und konstante Handhabung eines betrachteten Dokuments. Optische Zeichenerkennungsvorrichtungen sind sehr langsam und fehleranfällig und haben keine ausreichende Verarbeitungsmöglichkeit zur Darstellung grafischer Symbole.
- Außerdem sieht die Software auch solche Faktoren wie "Blenden" vor, um alles mit Ausnahme der gerade betrachteten Zeile zu verdecken.
- Die JP-A-62-168270 betrifft eine Musteränderungsvorrichtung, die binäre Bildeingabeinformationen empfängt, und offenbart eine Schabloneneinrichtung zum Durchführen einer Vergrößerung oder Verkleinerung, um die Verarbeitungszeit beim Vergrößern/Verkleinern zu verringern.
- In IBM J. RES. DEVELOP., Vol 26, Nr. 6, November 1982, Seiten 647 bis 656 wird ein Dokumentenanalysesystem beschrieben, das einen Benutzer beim Codieren gedruckter Dokumente zur Computerverarbeitung unterstützt. Digitalisierte gedruckte Dokumente werden in Bereiche von Text und Bildern mittels eines nichtlinearen Lauflängen-Glättungsalgorithmus segmentiert und klassifiziert. Anhand der regelmäßigen Merkmale von Textzeilen unterscheidet eine lineare adaptive Klassifikationslösung Textbereiche von anderen.
- Die GB-A-2070399 betrifft ein Verschiebesteuersystem in einem Rasterabtast-Bildanzeigesystem mit einer Anzeigevorrichtung, das ein Verschieben über ein Bild ermöglicht, das beliebig größer als der Bildspeicher ist, aus dem die Anzeige erzeugt wird. Dazu ist ein Bildspeicher ringförmig adressierbar, d. h., modulo- oder umlaufartig, und kann bei der dynamischen Erzeugung eines Bilds verwendet werden, das in horizontaler und vertikaler Richtung verschoben werden kann.
- Angesichts des bisher Gesagten besteht eine Aufgabe der Erfindung darin, ein System vorzusehen, das gedrucktes Material mit verbesserter Ergonomie vergrößert.
- Eine weitere Aufgabe der Erfindung besteht darin, ein System bereitzustellen, das Text und Grafik darstellen und ein Seitenformat erkennen kann.
- Diese und andere Aufgaben der Erfindung werden mit dem digitalen Vergrößerungssystem gemäß den Ansprüchen gelöst.
- Gemäß Anspruch 1 sieht die Erfindung ein System vor, das gedruckte Informationen abtastet und digitalisiert, die Informationen verarbeitet und die verarbeiteten Informationen zu einem Anzeigebildschirm ausgibt. Die digitale Dokumentenvergrößerungsvorrichtung der Erfindung verwendet einen Formatanalysator zum Bestimmen der Inhalte eines Dokuments und automatisiert anschließend die Darstellung des Dokuments für den Betrachter.
- Die digitale Dokumentenvergrößerungsvorrichtung verwendet eine eindeutig bestimmte Systemarchitektur (Hardware und Software) zum Erzeugen eines glatten Verschiebens und Rollens sehr großer digitalisierter Bilder mit geglätteter (interpolierter) Vergrößerung auf ökonomische Weise. Das System weist einen Mikroprozessor auf, der Informationen von einem optischen Abtaster empfängt und ein verarbeitetes Bild zu einem Bildspeicher ausgibt. Anschließend werden die Inhalte des Bildspeichers auf einem Monitor zum Betrachten angezeigt.
- Im Mittelpunkt dieser Architektur steht die Verwendung eines zweidimensionalen Rundanzeigepuffers. Dieser Puffer kann als "ringförmig" beschrieben werden, da die obere und untere sowie die linke und rechte Kante der Anzeigeoberfläche verbunden sind, um eine kontinuierliche Oberfläche zu bilden. Der zweidimensionale Rundanzeigepuffer wird hierin als "Ringpuffer" oder "Ringanzeigeoberfläche" bezeichnet.
- Die Software weist eine geschichtete Architektur auf, durch die der Benutzer vergrößerte Dokumente auf dem Anzeigebildschirm einfacher und rationeller betrachten kann. Die verarbeiteten Informationen können als kontinuierliche Materialzeile dargestellt werden, wobei Zeilen ohne Wagenrückläufe zusammengeheftet werden. Außerdem sieht die Software auch solche Merkmale wie "Blenden" vor, um alles mit Ausnahme der gerade betrachteten Zeile zu verdecken.
- Die bevorzugte Ausführungsform der digitalen Dokumentenvergrößerungsvorrichtung der Erfindung ist ein Einzelplatz- Lesegerät, das besonders wirtschaftlich herzustellen ist.
- Weitere Merkmale der Erfindung, ihre Beschaffenheit und verschiedene Vorteile gehen aus den beigefügten Zeichnungen und der nachfolgenden näheren Beschreibung der Erfindung deutlicher hervor, in denen gleiche Bezugszahlen gleiche Teile bezeichnen. Es zeigen:
- Fig. 1 eine schematische Ansicht eines Systems, das gemäß den Erfindungsgrundsätzen aufgebaut ist;
- Fig. 2 eine schematische Ansicht des Anzeigepuffers der Erfindung;
- Fig. 3 eine schematische Ansicht des Prozessors der digitalen Dokumentenvergrößerungsvorrichtung (DDM-Prozessors) von Fig. 1;
- Fig. 4 ein Blockschaltbild des Mikroprozessors von Fig. 3;
- Fig. 5 eine schematische Ansicht eines Direktspeicherzugriff-Datenwegs von Fig. 3;
- Fig. 6A eine schematische Ansicht des SCSI-Steuerschaltungsaufbaus von Fig. 3;
- Fig. 6B eine schematische Ansicht der Direktspeicherzugriff-Steuerlogik von Fig. 3;
- Fig. 7 eine schematische Ansicht des Datenwegs und des dynamischen RAM-Adreßschaltungsaufbaus von Fig. 3;
- Fig. 8 eine schematische Ansicht des Adreßdecodierer- Schaltungsaufbaus der Erfindung;
- Fig. 9 eine schematische Ansicht des dynamischen Direktzugriffspeichers (DRAM) von Fig. 3;
- Fig. 10 eine schematische Ansicht des löschbaren programmierbaren Festwertspeichers (EPROM) von Fig. 3;
- Fig. 11 eine schematische Ansicht des Bildspeichers von Fig. 3;
- Fig. 12 eine schematische Ansicht der Bildspeicher- Adreßzwischenspeicher und des Verschiebers von Fig. 3;
- Fig. 13 einen Ablaufplan des logischen Betriebs der Schaltung von Fig. 12, die in der Anzeigebetriebsart "ein Bit je Bildpunkt" arbeitet;
- Fig. 14 eine Speichertabelle des Anzeigespeichers, der eine Adreß-Aliaserzeugung zeigt;
- Fig. 15 eine schematische Ansicht der Bildsteuerlogik von Fig. 3;
- Fig. 16 eine nähere schematische Ansicht der Steuerregister von Fig. 15;
- Fig. 17 eine nähere schematische Ansicht von Abschnitten des Schaltungsaufbaus von Fig. 15;
- Fig. 18 eine nähere schematische Ansicht von Abschnitten des Schaltungsaufbaus von Fig. 15;
- Fig. 19 eine schematische Ansicht des Digital-Analog- Wandlerschaltungsaufbaus von Fig. 3;
- Fig. 20 ein Blockschaltbild der Anzeigeverwaltungssoftware der Erfindung; und
- Fig. 21 eine schematische Ansicht der Speicherabbildung der Anzeige unter Verwendung von Zonen eines Gitters.
- Das System der Erfindung kann zum Verarbeiten und Vergrößern gedruckter Informationen für verschiedene Zwecke verwendet werden. Beispielsweise kann das System verwendet werden, um Lesematerialien oder Verpackungen gewöhnlicher Haushaltsgegenstände abzutasten (z. B. können Personen mit beeinträchtigtem Sehvermögen Lebensmittelpackungen betrachten). Alternativ kann das System als Teleprompter für Nachrichtensprecher im Fernsehen verwendet werden. Außerdem läßt sich das System als "intelligente" Fotokopiermaschine verwenden, die gedruckte Informationen digitalisieren, Text von Grafik trennen und anschließend den gedruckten Text vor Erzeugen einer Kopie bereinigen und korrigieren kann.
- Gemäß Fig. 1 weist das allgemein mit der Bezugszahl 10 bezeichnete System der Erfindung einen digitalen Bildabtaster 12, einen DDM-Prozessor 14, einen Monitor oder eine Anzeigevorrichtung 16 und eine Benutzersteuervorrichtung 18 auf.
- Der Anzeigemonitor 16 hat vorzugsweise eine Anzeigeauflösung von 640 Bildpunkten in der Breite (horizontal) mal 480 Zeilen (vertikal). Damit können normale Computerbildschirme im Videografikstandard (VGA-Bildschirme), Studiomonitore und Fernsehgeräte als Anzeigevorrichtungen verwendet werden. Die Organisation eines Bilddirektzugriffspeichers (VRAM) 30 und eines Mikroprozessors 20 erfordert, daß die Anzeigepuffer eine Teilung von genau einer Binärpotenz haben (d. h., in Ausdehnung in der horizontalen Dimension). Die Verfahren zum Erreichen der vertikalen Rundheit des Ringpuff ers erfordern gleichfalls die Verwendung einer Binärpotenz. Somit beträgt die optimale Größe (d. h., die Begrenzung) für die Anzeigepuffer 1024 Bildpunkte in der Breite mal 512 Zeilen (nächstgrößere Binärpotenzen von der Anzeigeauflösung 640 x 480) für Anzeigebetriebsarten "ein Bit je Bildpunkt" ("1BPP") und "vier Bits je Bildpunkt" ("4BPP"). Zu Beispielen für handelsübliche Anzeigemonitore, die sich zur Verwendung als Monitor 16 eignen, gehören das Modell ZCM1492 (VGA Farbe) der Firma Zenith, das Modell ZMM149 (VGA Monochrom) der Firma Zenith und das Modell MAX-15 (VGA Monochrom) der Firma Princeton Graphics. Außerdem kann als Monitor 16 jedes Fernsehgerät in Kopplung mit einem Modulator verwendet werden, z. B. dem Modell 15-1273 der Firma Radio Shack.
- Bei Verwendung als System für Benutzer mit beeinträchtigtem Sehvermögen nutzt die digitale Anzeigevergrößerungsvorrichtung eine Monochromanzeige. Monochromanzeigen liefern das kontrastreiche Bild, das von den meisten Benutzern mit Sehstörungen benötigt wird. Monochromanzeigen erfordern ein einziges Datenbit je Bildpunkt zur Erzeugung eines Bilds. Eine Grauskalen- und Farbanzeigefähigkeit kann nörmalerweise durch die Prozessorhardware der digitalen Dokumentenvergrößerungsvorrichtung unter Verwendung eines einzigen Ringanzeigepuffers vorgesehen sein, um mögliche spezielle Benutzerbedürfnisse zu erfüllen. Grauskalen- und Farbanzeigen erfordern vier Datenbits je Bildpunkt zur Erzeugung eines Bilds. Die Datenanforderungen von Monochrom-, Grauskalen- und Farbanzeigen werden später näher diskutiert.
- Zur Verwendung mit der digitalen Dokumentenvergrößerungsvorrichtung der Erfindung geeignete digitale Bildabtaster sind im Handel erhältlich, z. B. von der Firma TEC (Modell S-3401-ST) und von der Firma Ricoh (Modell IS11). Der Bildabtaster 12 ist vorzugsweise ein Monochrom-Bildabtaster mit einer Auflösung von mindestens 300 Punkten je Inch (SPI). Außerdem weist der Bildabtaster 12 eine Einrichtung zur Kopplung mit dem DDM-Prozessor 14 auf (z. B. die später diskutierte Systemschnittstelle für Kleincomputer (SCSI)). Normalerweise kann der Bildabtaster 12 eine Platte von 8,5 Inch x 11 Inch haben, um bequem Dokumente üblicher Größen abzutasten. Der Fachmann wird jedoch erkennen, daß auch andere Bildabtaster, z. B. Handabtaster, als Bildabtaster 12 verwendet werden könnten.
- Die Benutzersteuervorrichtung 18 bietet dem Betrachter eine Einrichtung zum selektiven Betrachten von Optionen aus einem auf der Anzeige auf dem Monitor 16 dargestellten Menü und zum Steuern der Position eines Cursors auf dem betrachteten Dokument. Die Benutzersteuervorrichtung 18 ist vorzugsweise eine handelsübliche Trackball-Vorrichtung, z. B. das Modell FASTTRAP der Firma Microspeed. Alternativ könnte die Benutzersteuervorrichtung 18 eine normale Joystick- oder Mauszeigevorrichtung sein. Die Benutzersteuervorrichtung ist mit dem DDM-Prozessor 14 über den RS-232-Anschluß einer handelsüblichen UART-Vorrichtung verbunden. Eine zur Verwendung in der Erfindung geeignete UART-Vorrichtung ist die 2681 DUART der Firma Signetics, die einen zweiten RS-232-Anschluß für zukünftige Erweiterung vorsieht. Es kann aber jede UART verwendet werden.
- Durch zwei miteinander verknüpfte technische Innovationen kann die digitale Dokumentenvergrößerungsvorrichtung wirksam funktionieren: einen Ringanzeigepuffer und ein sehr schnelles inkrementales Vergrößern/Verkleinern bzw. Zoom. Das Dokumentbild wird "fliegend" zum Anzeigepuffer gezoomt. Das Bild wird nur soweit gezoomt, wie zum Realisieren der Verschiebe- oder Rollbewegung notwendig ist, anstatt das gesamte Dokumentbild zu zoomen. Durch die Ringanzeigeoberfläche braucht nur der neu aufgedeckte Anzeigeabschnitt für sowohl Verschiebe- als auch Rollbewegungen aktualisiert zu werden.
- Zu bekannten Verfahren zum Realisieren von auf Computerlogik beruhenden Zoomeffekten gehören die Hardware-Bildpunktreplikation und die Softwareumwandlung ganzer Bilder. Das erstgenannte Verfahren ist auf ganzzahlige Vergrößerungsschritte beschränkt, erfordert zusätzliche Rechenhardware und kann nicht zum Erzeugen hochqualitativer (geglätteter) vergrößerter Anzeigen verwendet werden. Das letztgenannte Verfahren erfordert ausreichenden Speicherplatz, um das vergrößerte Bild aufzunehmen (für eine 50fache Vergrößerung eines Seitenbilds von 8,5 Inch mal 11 Inch, abgetastet mit 300 SPI, wären 64 Millionen Bytes Bildspeicher erforderlich).
- Die Architektur der Erfindung erreicht die gewünschten Anzeigeeffekte bei Minimierung von Speicher- und Rechenanforderungen über eine kombinierte Hardware-/Softwarestrategie auf der Grundlage einer spezifischen Organisation des Computerspeichers. Der Bildspeicher ist in zwei Gebiete aufgeteilt: den Seitenpuffer und den Anzeigepuffer.
- Der Seitenpuffer enthält das abgetastete Bild als binäres Punktraster. Dieser Puffer kann nicht direkt angezeigt werden. Durch diese Beschränkung können Bilddaten "gepackt" werden, wodurch etwa 500 Kilobytes Speicher im Vergleich zu einem direkt anzeigbaren Bild eingespart werden, was eine Binärpotenz-Zeilenlänge erfordert. Der Seitenpuffer ist in einem DRAM 28 und nicht im anzeigbaren VRAM 30 gebildet.
- Die Inhalte des Anzeigepuffers erscheinen auf dem Bildschirm. Der Anzeigepuffer wird aus dem Seitenpuffer beim Verschieben oder Rollen in 60 Inkrementen je Sekunde aktualisiert, um den Anschein einer glatten Bewegung zu erzeugen. Diese Aktualisierung erfolgt mit einem sehr schnellen Software-Zoomalgorithmus, der nachstehend als "inkrementales Schablonenzoom" bezeichnet wird. Somit erfolgt die Größentransformation des Seitenbilds nach Bedarf dynamisch beim Verschieben oder Rollen. Der Anzeigepuffer ist als kontinuierliche Oberfläche (Ring) so organisiert, daß nur ein kleiner Streifen des Quellseitenpuffers zum Anzeigepuffer je Inkrement einer Verschiebe- oder Rollbewegung bewegt (gezoomt) werden muß. Damit wird die Rechenzeit stark verringert.
- Eine Aktualisierung des gesamten Anzeigebildschirms im Pufferspeicher könnte mit den Schablonenzoomverfahren bis zu eine Sekunde dauern, was 60mal langsamer als die notwendige Geschwindigkeit ist, um den Anschein glatter Bewegung zu erzeugen. Durch den Ringpuffer kann die kontinuierliche und inkrementale Aktualisierung der Anzeige sowohl in der x- als auch y-Dimension erfolgen, ohne daß der gesamte Anzeigepuffer aktualisiert werden muß, wenn die Begrenzungen des Anzeigespeichers erreicht werden.
- Der physikalische Anzeigepufferspeicher unterscheidet sich stark vom logisch ringförmigen Anzeigepuffer. Der physikalische Anzeigepufferspeicher hat einen festen Ausgangspunkt (Ursprung) und eine feste Größe (Ausmaße). Der Ringpuffer, der aus dem physikalischen Anzeigespeicher aufgebaut ist, hat eine kontinuierliche Oberfläche. Der Ringpuffer hat einen Ursprung, der sich gegenüber dem Ursprung des physikalischen Anzeigespeichers bewegt und der linken oberen Ecke des Anzeigebildschirms entspricht.
- Fig. 2 zeigt den Ringpuffer der Erfindung. Der physikalische Anzeigepufferspeicher 15 hat einen Ursprung 13, der in Beziehung zu einem Ursprung 23 des logisch ringförmigen Anzeigepuffers gezeigt ist, der aus ihm aufgebaut ist. Der Ringpufferursprung 23 stimmt stets mit der linken oberen Ecke eines Anzeigebildschirms 27 überein. Der Ringpufferursprung 23 kann überall im Anzeigepufferspeicher 15 liegen und ist vom Ursprung 13 des Anzeigepufferspeichers sowohl in der x- als auch y-Dimension versetzt dargestellt.
- Eine inkrementale Aktualisierung des logisch ringförmigen Anzeigepuffers wird durch die Software verwaltet, während eine Rekonstruktion des Puffers zum Anzeigebildschirm während der Anzeigeauffrischung hardwareseitig erfolgt. Fig. 2 zeigt Bildsegmente "A" bis "D", die physikalischen Speicherstellen eines zusammenhängenden Bilds entsprechen, das im logisch ringförmigen Puffer enthalten ist. Die Bildsegmente laufen um die Begrenzungen des physikalischen Pufferspeichers sowohl in der x- als auch der y-Dimension um. Zum Rekonstruieren dieses Bilds auf dem Bildschirm wird der Anfangspunkt beim Auffrischen des Anzeigemonitors auf den Ringpufferursprung 23 gesetzt. Die Segmente B bis D müssen an den richtigen Positionen auf dem Anzeigebildschirm 27 abgebildet werden. Die bevorzugte Ausführungsform des Abbildens von Segmenten durch Adreßtransformation des Anzeigespeichers wird später beschrieben. (Eine alternative Ausführungsform unter Verwendung der hardwareseitigen Fenstertechnikfähigkeit einer Intel 82786-Grafiksteuerung wird ebenfalls später beschrieben.)
- Der Ringanzeigepuffer wird erzeugt, um ausdrücklich eine inkrementale und kontinuierliche Aktualisierung des Bildschirms wie folgt zu unterstützen: Der Ringanzeigepuffer ist größer als die Bildschirmausmaße gestaltet, um eine versteckte Aktualisierung 25 des Puffers genau hinter den Bildschirmkanten vorzusehen. Zum Beispiel wird zum Erzeugen einer kontinuierlichen Verschiebebewegung nach links ein Streifen des Anzeigespeichers 25 mit gleicher Begrenzung wie das Bewegungsinkrement aus dem Seitenpuffer zum Anzeigepuffer genau hinter der rechten Kante des Bildschirms 17 geschrieben, wobei das inkrementale Schablonenzoom zum Einsatz kommt. Anschließend wird der Ringpufferursprung durch das Bewegungsinkrement von 19 auf 23 bewegt, wodurch der Anfangspunkt zum Auffrischen der Anzeigeaktualisierung entsprechend bewegt wird. Ein schraffierter Bereich 29 entspricht "veralteten" Bilddaten. Im Beispiel von Fig. 2 sind die Ausmaße des Anzeigepufferspeicher Binärpotenzen, was jedoch nicht notwendigerweise so sein muß.
- Zu beachten ist, daß das Aktualisierungsinkrement eine oder beide Begrenzungen des Anzeigepufferspeichers überspannen kann. Die Softwareroutinen zum inkrementalen Schablonenzoom unterstützen eine solche Aktualisierung mit später beschriebenen Abschneideoperationen.
- Gemäß Fig. 3 weist der DDM-Prozessor 14 auf: einen Mikroprozessor 20, einen Host-Schnittstellenmultiplexer 22, eine Direktspeicherzugriffs-Steuerlogik (DMA-Steuerlogik) 24, eine Systemschnittstellensteuerung für Kleincomputer (SCSI- Steuerung) 26, einen dynamischen RAM (DRAM) 28, einen Bild- RAM (VRAM) 30, eine Bildsteuerlogik 32 und einen seriellen Kommunikationsschaltungsaufbau 34 (zum Anschließen der Benutzersteuervorrichtung 18). Außerdem kann der DDM-Prozessor 14 ein (nicht gezeigtes) internes handelsübliches Festplattenlaufwerk zum Speichern digitaler Daten vom digitalen Bildabtaster 12 aufweisen. Das Festplattenlaufwerk kann normalerweise mit der SCSI-Schnittstelle gekoppelt sein.
- Der Mikroprozessor 20 weist drei (näher in Fig. 4 gezeigte) Haupt-Schnittstellengruppen auf. Der Mikroprozessor weist Busse 21 (zum Koppeln mit einem Host ("Host- Schnittstelle")), einen lokalen Adreß- und Datenbus ("LAD- Bus") 42 und einen Bildschnittstellenbus 40 auf. Vorzugsweise wird ein einzelner Grafik-Mikroprozessor für alle Rechen- und Anzeigesteuerfunktionen verwendet, wodurch Kosten verringert werden. Der hierin als Mikroprozessor 20 beschriebene Mikroprozessor ist ein Grafikprozessor Modell TMS34010 der Firma Texas Instruments. Der Fachmann wird jedoch erkennen, daß die Erfindung mit einem Mehrzweck-Mikroprozessor in Verbindung mit einem Grafiksteuerchip oder einer anwendungsspezifischen Bildsteuerlogikschaltung praktiziert werden könnte.
- In der bevorzugten Ausführungsform ist die Steuerlogik 24 mit der Host-Schnittstelle 21 des Prozessors 20 über den Host-Schnittstellenmultiplexer 22 gekoppelt. Der Prozessor 20 verwendet den Host-Schnittstellenbus als gegenseitige Verbindung mit einem Personalcomputer zu Zwecken der Softwareentwicklung (Konstruktion) über ein Kabel und eine spezielle PC- Schnittstellenkarte 35. Dadurch kann übliche "Testhilfe"- Software verwendet werden (z. B. GSPOT der Firma Pixelab). Das Testhilfeprogramm betrachtet die Hardware der digitalen Dokumentenvergrößerungsvorrichtung als "nachgerüstete" PC- Grafikkarte. Der Host-Schnittstellenmultiplexer 22 dient zum Multiplexen von der Steuerlogik 24 und der PC-Schnittstellenkarte 35 zum Prozessor 20.
- Der DDM-Prozessor 14 empfängt digitalisierte Informationen vom optischen Abtaster 12 über eine SCSI-Schnittstelle. Obwohl hierin eine SCSI-Schnittstelle erwähnt ist, wird verständlich sein, daß jede geeignete Schnittstelle verwendet werden kann. Der Einfachheit halber wird jedoch nur eine SCSI-Schnittstelle und zugehörige Hardware diskutiert.
- Die SCSI-Schnittstelle des Abtasters ist mit der SCSI- Steuerung 26 verbunden, die wiederum mit der DMA-Steuerlogik 24 gekoppelt ist. Die SCSI-Steuerung 26 implementiert ein SCSI-Schnittstellenprotokoll. Eine zur Verwendung in der Erfindung geeignete Steuerung ist im Handel von der Firma NCR erhältlich (Modell NCR 53C90A). Die DMA-Steuerlogik ist mit dem Mikroprozessor 20 verbunden. Die DMA-Steuerlogik 24 kann normalerweise auch mit einem Daten-, Adreß- und Steuerbus 36, 38 und 40 verbunden sein.
- Die Host-Schnittstelle 21 des Prozessors 20 bildet einen kostengünstigen Direktspeicher-Schnittstellenweg für den Bildabtaster. Der durch den Prozessor 20 vorgesehene Host- Schnittstellenbus 21 wird verwendet, um abgetastete Bilddaten unter Verwendung der DMA-Technik rationell zum DRAM 28 zu bewegen. Eine Abtastfläche von 8,5 Inch x 11 Inch erzeugt bei einer Auflösung von 300 Punkten je Inch (SPI) über eine Million Datenbytes je Abtastung. Beim Abtasten führt der Prozessor 20 eine Dokumentenformatanalyse durch. Somit ist eine rationelle Datenübertragung wichtig, um Zeit der Zentraleinheit (CPU-Zeit) zum Rechnen freizugeben.
- DMA-Steuerungen sehen normalerweise eine Adreßerzeugung mit automatischer Inkrementierfähigkeit, einen Buszuteilungs- Quittungsmechanismus, eine Übertragungssteuerung und einen Übertragungszähler vor. Der Host-Anschluß des Prozessors 20 sieht eine Adreßerzeugung mit automatischer Inkrementierfähigkeit und einen Buszuteilungs-Quittungsmechanismus vor. Die SCSI-Steuerung 26 sieht einen DMA-Anforderungs-/Quittungsbetrieb (über einen Bus 65) und einen Übertragungszähler vor.
- Der DMA-Schaltungsaufbau der Erfindung ist niher in Fig. 5 und 6B dargestellt. Ein Daten-Buskoppler 56 überträgt Daten zwischen dem PC-Verbinder 35 und dem Prozessor 20. Durch Daten-Buskoppler 58 und 60 kann die DMA-Datenübertragung zwischen dem Bildabtaster 12 (über die SCSI-Steuerung 26) und der Host-Schnittstelle 21 des Prozessors 12 auf einem Bus 61 erfolgen. Die Daten gelangen vom Abtaster 12 über die SCSI- Steuerung 26 auf einen Bus 62. Die Daten werden zum Host-Anschluß 21 des Prozessors 20 und anschließend zum DRAM-Speicher über den Buskoppler 58 oder 60 geführt. Der Daten-Buskoppler 58 sendet Kommandos und empfängt Antworten vom Abtaster. Der Buskoppler 60 empfängt Bilddaten, da der bevorzugte Abtaster 12 (TEC) die Bilddaten-Bitordnungskonvention für Personalcomputer (8086-Konvention der Firma Intel) verwendet, die umgekehrt zur Konvention der Firma Texas Instruments (34010-Konvention) ist. Die Daten auf dem Bus 36 können auch über einen Buskoppler 64 zum lokalen Speicherbus 42 und von ihm weg geführt werden. Die SCSI-Steuerung 26 muß mit dem Prozessor 20 so gekoppelt sein, daß der Prozessor interne Register der SCSI-Steuerung programmieren kann, um Übertragungen vom optischen Abtaster 12 einzurichten. Der Wirtschaftlichkeit halber haben alle Datenwege normalerweise eine Breite von acht Bits.
- Die Host-Schnittstelle 21 des Prozessors 20 sieht ein internes Adreßregister mit automatischer Inkrementierfähigkeit vor. Der CPU-Abschnitt des Prozessors 20 setzt das interne Register auf eine Anfangsadresse. Anschließend können Daten kontinuierlich auf dem Bus 36 über die Datenleitungen der Host-Schnittstelle ohne Eingriff der CPU zum oder aus dem Speicher übertragen werden. Der Host-Schnittstellenbus 21 sieht einen Zugriff auf den Speicher am LAD-Bus 42 mit Zuteilung sowie Adreß- und Steuersignalerzeugung vor. Die Daten können als Einzelbytes gelesen oder geschrieben werden. Eine Bytezusammenstellung zu Wörtern erfolgt automatisch durch die Host-Schnittstellenlogik, wiederum ohne CPU-Eingriff.
- Fig. 6A zeigt die SCSI-Steuerung 26, die mit SCSI- Verbindern 66 über einen SCSI-Bus 68 gekoppelt ist. Der SCSI- Bus 68 sieht vorzugsweise ausreichende Daten- und Steuerleitungen zum gleichzeitigen Koppeln von bis zu acht Geräten mit den SCSI-Verbindern 66 vor. Die SCSI-Steuerung 26 empfängt acht bidirektionale Datenbits über den Bus 62, vier Adreßbits über einen Bus 70 sowie Steuer- und DMA-Quittierungsbits über den Bus 65.
- Das verbleibende Element, das für eine vollständige DMA- Steuerlösung erforderlich ist, ist eine Übertragungssteuerung. Der Schaltungsaufbau von Fig. 68 sieht diese Funktion vor. Steuerinformationen vom Bus 65 werden einem "Steuerungs"-Multiplexer 72, einer DMA-Folgesteuerung 74, einem DMA-Steuerregister 75 und einem Synchronisierer 76 eingegeben. Folgegebundene Steuersignale werden über einen Bus 78 zu den Steuerdaten-Buskopplern 58, 60 und 64 sowie zum Host- Schnittstellenmultiplexer 22 ausgegeben.
- Der Prozessor 20 greift auf das Steuerregister 75 über den LAD-Bus zu, um den DMA-Betrieb zu ermöglichen, die Richtung der DMA-Übertragung einzustellen (zu oder von dem ausgewählten SCSI-Gerät) und die für die DMA-Datenübertragung zu verwendende Bitordnungskonvention einzustellen (siehe oben). Die DMA-Folgesteuerung 74 ist ein Synchronzustandsapparat, der durch Programmieren eines normalen PAL-Geräts implementiert ist.
- Der Zustandsapparat empfängt eine DMA-Übertragungsanforderung von der SCSI-Steuerung 26 und reagiert mit dem DMA- Quittungssignal, wenn der Host-Bus verfügbar ist. Anschließend erzeugt der Zustandsapparat die Datenwegfreigabe- und Datenzeitsignale, die zur Durchführung der Übertragung eines Datenbytes zwischen der SCSI-Steuerung 26 und der Host- Schnittstelle 21 notwendig sind. Der Synchronisierer 76 gewährleistet, daß alle Eingaben des Zustandsapparats taktsynchron sind. Der Multiplexer 72 schaltet den Zugriff auf die Steuersignale der SCSI-Steuerung zwischen dem Prozessor 20 und der DMA-Folgesteuerung 74 um.
- Der Mikroprozessor 20 ist mit dem LAD-Bus 42 gekoppelt (siehe Fig. 4). Der LAD-Bus 42 ist ein Dreifach-Multiplexbus. Der LAD-Bus 42 wird im Zeitmupltiplex behandelt, um eine obere Adresse, eine untere Adresse und Daten an 16 Anschlüssen bereitzustellen. Der Steuerbus 40 stellt Signale zur Steuerung des externen Demultiplexens des Busses 42 bereit. Über den LAD-Bus 42 ist der Mikroprozessor 20 mit Adreßzwischenspeichern und -decodierern 44, Bildspeicher-Adreßzwischenspeichern 46 und Daten-Buskopplern 48 gekoppelt.
- Gemäß Fig. 7 behandeln Oktaladreßzwischenspeicher (80, 82, 84 und 86) sowie Daten-Buskoppler (88 und 90) den Bus 42 im Demultiplex zum Koppeln mit Speichern und speicherorientierten Eingabe/Ausgabe-Geräten (E/A-Geräten). Spezifische Speicheradressen werden den verschiedenen Speichern und E/A- Geräten über Chip-Auswahlsignale gemäß der Decodierung durch programmierbare logische Matrixfelder (PALs) 92, 94 und 96 (Fig. 8) zugewiesen. Der LAD-Bus wird mit herkömmlichen Techniken im Demultiplex behandelt und adreßdecodiert, mit Ausnahme des Demultiplexens und Decodierens für den Bild-RAM (VRAM), aus dem der Ringanzeigepuffer aufgebaut ist (was später diskutiert wird).
- Vom Bus 42 erfolgt die Eingabe zu den Zwischenspeichern 80 und 82 für obere Adressen. Die Ausgabe der Zwischenspeicher 80 und 82 geht als Eingabe zum PAL 92 für die Decodierung der Befehle für den Direktzugriffspeichers (RAM), zum PAL 94 für die Decodierung des Bild-Direktzugriffspeichers und des EPROM und zum PAL 96 für die Registerdecodierung und Wartestatuserzeugung über den Adreßbus 38. Die Ausgabe der Zwischenspeicher 84 und 86 für untere Adressen wird über den Adreßbus 38 zur SCSI-Steuerung 26 und zum DRAM 28 (sowie zur UART, zum D/A-wandlerschaltungsaufbau und zur Bildsteuerlogik gemäß der nachfolgenden Diskussion) übertragen. Außerdem ist die Ausgabe der Register 80, 82, 84 und 86 für obere und untere Adressen mit einem EPROM 50 gekoppelt.
- Zwischen dem LAD-Bus 42 und dem Datenbus 36 verlaufen die Daten über die Buskoppler 88 und 90. Gemäß Fig. 3 sieht der Datenbus 36 einen Datenweg zwischen dem Prozessor 20 (über die Daten-Buskoppler 48) und dem EPROM 50, dem DRAM 28, dem VRAM 30, der Bildsteuerlogik 32, einem elektrisch löschbaren programmierbaren Festwertspeicher (EEPROM) 52, der UART 34 und der DMA-Steuerlogik 24 vor. Auf ähnliche Weise werden Bussteuersignale vom Prozessor 20 über den Steuerbus 40 zu diesen Geräten übertragen.
- Außerdem führt der LAD-Bus 42 Eingaben zu den VRAM- Adreßzwischenspeichern 46. Der Prozessor 20 adressiert den VRAM 30 über den Bus 42, die VRAM-Adreßzwischenspeicher 46 und einen VRAM-Adreßbus 110.
- Die Bildsteuersignale des Prozessors 20 erlauben eine Synchronisierung und Austastung typischer Rasterabtast-Anzeigegeräte mit nur minimaler externer Hardware. Die Bildsteuersignale und die sie konfigurierenden internen Register des Prozessors 20 werden auf herkömmliche Weise verwendet. Neuartig sind der Bildsteuer- und Datenweg, die extern zum Prozessor 20 verlaufen und nachfolgend näher beschrieben werden.
- Der DDM-Prozessor 14 weist den DRAM 28 (Fig. 9) zum Speichern von Seitenbildern sowie zum festen und dynamischen Zuweisen von Softwarevariablen auf. Der DRAM 28 kann in einem beliebigen von mehreren Formaten organisiert sein. Vorzugsweise weist der DRAM 28 1,5 bis 2 Megabytes Speicher auf, der aus zwölf bis sechzehn 256-Kilobyte x 4-Bausteinen besteht, oder er weist 2 bis 8 Megabytes Speicher auf, der aus vier bis sechzehn 1-Megabyte x 4-Bausteinen besteht. Die größeren Speicherkonfigurationen bieten Speicherplatz für bis zu 50 Seitenbildern durch CCITT-Datenkompression (für Fernkopierer). Zu Speicherbausteinen, die zum Implementieren des DRAM 28 geeignet sind, gehören die Modelle TC514256AZ-10 (256 Kilobytes x 4) und TC514400Z-10 (1 Megabyte x 4), die im Handel von der Firma Toshiba erhältlich sind.
- Außerdem weist der DDM-Prozessor 14 Speicher zur Durchführung weiterer Funktionen auf. Zum DDM-Prozessor 14 gehört der EPROM 50, der näher in Fig. 10 dargestellt ist. Der EPROM 50 hat 256 Kilobytes bis 1 Megabyte löschbaren programmierbaren Festwertspeicher zum Speichern aller für den DDM-Prozessor 14 benötigten Softwareprogramme und zum Speichern fester Daten. Der EPROM 50 kann z. B. durch zwei bis vier 512-Kilobit x 8-EPROMs oder einen 2-Megabit x 8-EPROM realisiert sein. Zu Speicherbausteinen, die zum Implementieren des EPROM 50 geeignet sind, gehören die Modelle 27C512, 27C1024 und 27C2048, die im Handel von den Firmen Intel Corporation und Advanced Micro Devices, Inc. erhältlich sind. Jeder allgemeine EPROM mit 512 Kilobits oder mehr kann verwendet werden.
- Ferner weist der DDM-Prozessor 14 den EEPROM 52 auf. Der EEPROM 52 dient zum nichtflüchtigen Speichern von Steuerdaten, die vom Benutzer geändert und über Menü ausgewählt werden können. Durch den EEPROM 52 kann die digitale Dokumentenvergrößerungsvorrichtung eine vom Betrachter bevorzugte Einstellung beim Einschalten wiederherstellen. Der EEPROM 52 ist als einzelner 2-Kilobyte x 8-Baustein mit dem Modell 28C16 implementiert, das im Handel von der Firma Atmel and Seeq erhältlich ist.
- Der DDM-Prozessor 14 sieht hardwareseitig Doppelrundanzeigepuffer (Ringanzeigepuffer) vor. Durch diese Anzeigespeicherkonfiguration können Seitenbilder als gepackte Punktraster gespeichert werden, die inkremental an der verdeckten Kante des Anzeigepuffers mit dem vom Benutzer ausgewählten Maßstabfaktor geschrieben werden, um die inkrementale Aktualisierung 25 (siehe Fig. 2) des Bildschirmbilds so vorzunehmen, wie es die vom Benutzer gesteuerte Verschiebe- oder Rollbewegung erfordert.
- Gemäß Fig. 11 dient der VRAM 30 zum Aufbau des Ringanzeigepuffers. Der VRAM 30 erzeugt entweder zwei oder vier Ringpuffer bei einem Bit je Bildpunkt (1BPP) (für monochrome Anzeigen) oder einen Ringpuffer bei vier Bits je Bildpunkt (4BPP) (für Grauskalen- oder Farbanzeigen). Mehrere Anzeigepuffer sind vorgesehen, damit die Anzeige schnell zwischen Anzeigen umgeschaltet werden kann (z. B. Umschalten von einem Seitenbild auf eine Menüanzeige). Der VRAM 30 weist 128 bis 256 Kilobytes Bild-RAM auf und kann mit vier oder acht 64-Kilobit x 4-Bausteinen implementiert sein. Zum Realisieren des VRAM 30 geeignete Speicherbausteine sind im Handel erhältlich, zu ihnen gehören das Modell TMS4461 der Firma Texas Instruments und das Modell V53C261 der Firma Vitelic.
- Die Ringpuffer der digitalen Dokumentenvergrößerungsvorrichtung werden durch Transformieren von Speicheradressen zum und aus dem VRAM 30 aufgebaut. Die Techniken zum Herstellen der Pufferrundheit sind für die innere Organisation von VRAMs kennzeichnend. Der VRAM 30 erhöht die Recheneffektivität, indem er den Mikroprozessorbus von den wiederkehrend benötigten Speicherzyklen befreit, um das gepufferte Bild zur Rasterabtastanzeige zu schreiben (Anzeigeauffrischung).
- Gemäß Fig. 11 weist der VRAM 30 vorzugsweise zwei VRAM- Bänke 98 und 100 auf. Die VRAM-Bank 98 speichert Daten für die 1BPP-Anzeigebetriebsart. Die VRAM-Bank 100 wird zusammen mit der Bank 98 zum Realisieren der 4BPP-Anzeigebetriebsart verwendet. Der VRAM 30 verwendet eine "Doppelanschluß"-Konstruktion, was durch einen VRAM-Chip 102 veranschaulicht ist. Ein Anschluß ist eine herkömmliche DRAM-Speicherschnittstelle 104 zum Prozessor 20, und der zweite Anschluß 106 weist Schieberegister auf. Daten treten in den VRAM 30 über die DRAM-Schnittstelle 104 ein. In die Schieberegister werden Anzeigedaten geladen, die mit Bildtaktraten auf einen Datenbus 108 auszutakten sind. Der VRAM 30 empfängt Adreßinformationen über Adreßleitungen 112 auf dem VRAM-Adreßbus 110.
- Jeder VRAM-Chip des VRAM 30 weist vier Speicherbereiche mit jeweils 256 Zeilen und 256 Spalten Speicherplatz auf. Jede Speicherzeile in jedem Bereich kann in ein 256-Bit-Schieberegister (je Chip sind vier Schieberegister vorhanden) in einer einzigen Operation geladen werden. Der Anfangspunkt (Spalte) in der geladenen Zeile ist durch seine Spaltenadresse während des Ladezyklus festgelegt. Die Schieberegister laufen ständig um bzw. rezirkulieren. Der Prozessor 20 steuert automatisch das Beladen der VRAM-Schieberegister aus den Speicherblöcken.
- Vier 4 Bits breite VRAMs sind zum Verbinden des 16 Bits breiten, im Demultiplex behandelten Datenbusses des Prozessors 20 erforderlich. Somit sind sechzehn Ausgänge (vier VRAMs mit vier Verschiebern je VRAM) am Bildverschieberanschluß von den 256-Bit-Schieberegistern vorhanden. Die sechzehn Ausgänge bilden den Bilddatenbus 54. Bei vier Bits je Bildpunkt erzeugt jeder Takt zu den Schieberegistern vier 4- Bit-Bildpunkte. Diese müssen im Multiplex zu einem 4 Bits breiten Strom behandelt und vom Bilddatenbus mit einer Rate abgeführt werden, die dem Vierfachen der Verschiebetaktrate entspricht. Bei einem Bit je Bildpunkt (1BPP-Anzelgebetriebsart) erzeugt jeder Verschiebetakt sechzehn Bildpunkte. Diese Bildpunkte müssen im Multiplex zu einem Datenstrom mit einer Breite von einem einzelnen Bildpunkt mit dem 16fachen der Verschieberate behandelt werden.
- Die sechzehn 256 Bits breiten VRAM-Bildschieberegister sehen insgesamt 4096 Bits Speicherplatz je Anzeigeabtastzeile vor. Bei 4BPP ist die Abtastzeile 1024 Bildpunkte breit. Zwei Bänke aus VRAMs (d. h., die Bänke 98 und 100 von Fig. 10) sind erforderlich, um 512 Zeilen (Abtastzeilen) Speicherplatz vorzusehen. Da die VRAM-Schieberegister rezirkulieren, kann die horizontale Anfangskoordinate für die Anzeige an beliebiger Stelle im Anzeigepuffer positioniert sein. Die Anzeige läuft automatisch um die horizontalen Pufferbegrenzungen um. Somit ergibt sich die horizontale Komponente der Pufferrundheit ausschließlich aus der internen Organisation der VRAM- Chips 102 für das 4BPP-Format.
- Bei 1BPP liefern die 4096 Bits Schieberegister-Speicherplatz 4096 Bildpunkte je Anzeigeabtastzeile, also das Vierfache des Erforderlichen. Da der Anzeigepuffer durch den Prozessor beim Verschieben ständig aktualisiert werden muß, wäre der zusätzliche Speicherplatz verschwendet. Zur Erhöhung der Systemeffektivität erfolgt eine Adreßumrechnung bzw. -übersetzung, um die Speicherorganisation zu ändern. Die Adreßübersetzung führt zu zwei 1024 Bits breiten Horizontalrundpuffern bei 1BPP mit einer einzelnen Bank (Bank 98) aus vier VRAMs. Vier Ringpuffer sind vorgesehen, die zwei Bänke (Bänke 98 und 100) mit jeweils vier VRAMs verwenden. Somit erhöht die Reorganisation des Speichers den nutzbaren Anzeigespeicher um einen Faktor von vier, indem lediglich ein einzelner zusätzlicher Zwischenspeicher 126 verwendet wird (Fig. 12).
- Die Zwischenspeicher/Verschieber-Kombination 46 für VRAM-Adressen ist näher in Fig. 12 gezeigt. Fig. 13 zeigt die logische Operation der Schaltung von Fig. 12 beim Betrieb in der 1BPP-Anzeigebetriebsart. (In Fig. 13 wird die Signalnomenklatur der Firma Texas Instruments verwendet.) In der 4BPP-Betriebsart wird die RAS/CAS-Multiplexadresse vom Prozessor 20 durch einen "Durchgangs"-Zwischenspeicher 124 gegattert, der zwischengespeicherte Adressen ohne Anderung zum VRAM-Adreßbus 110 führt. In der 1BPP-Betriebsart ist der Zwischenspeicher 124 jedoch gesperrt, und ein zweiter Adreßzwischenspeicher 126 ist mit dem VRAM-Adreßbus 110 verbunden.
- Die RAS/CAS-Multiplexadresse vom Prozessor 20 wird "trommelartig" verschoben (siehe Fig. 12), indem der Zwischenspeicher 126 mit dem LAD-Bus 42 verbunden wird. Die beiden höchstwertigen Bits sowohl der Zeilen- als auch der Spaltenadresse werden die beiden niederwertigsten Bits, wobei die anderen Adreßbits um zwei Stellen nach links verschoben werden.
- Ist der Anzeigepuffer 1024 Bits breit, verschachtelt die "Trommelverschiebung" der CAS-Adresse (Anzapfpunkt des Schieberegisters) Bildbuswörter zwischen vier aufeinanderfolgenden Zeilen. Anders ausgedrückt bestehen kontinuierlich aus den VRAM-Verschiebern ausgetaktete Daten aus 16 Bildpunkten der Zeile 1, danach 16 Bildpunkten der Zeilen 2, 3 bzw. 4 und anschließend den nächsten 16 Bildpunkten der Zeile 1 usw. Die Bildsteuerlogik 32 weist ein (später diskutiertes) Halteregister auf, das nur die der aktuellen Zeile entsprechenden Bilddatenwörter erfaßt, also drei von je vier aufeinanderfolgenden Bilddatenwörtern im Demultiplexverfahren überspringt.
- Die VRAM-Verschieberdaten rezirkulieren, nachdem die Daten aus der letzten Spalte aus den Schieberegistern ausgelesen sind. Das Verschachteln von Zeilen bewirkt, daß das Umlaufen einer beliebigen Zeile an einer 1024-Bildpunktgrenze stattfindet. Somit ist der 1024 Bits breite 1BPP-Anzeigepuffer horizontal rund.
- Die Bandbreite des Bilddatenbusses wäre bei 1BPP normalerweise viermal kleiner als die Bandbreite bei 4BPP für die gleiche Anzeigeauflösung. Da aber Daten für verschachtelte Zeilen ausgetaktet werden, bleibt die Bildbusdatenrate zwischen Anzeigebetriebsarten konstant, und die Verschiebetaktzeiten sind identisch.
- Es ist wichtig zu beachten, daß für sowohl die 4BPP- als auch die 1BPP-Anzeigebetriebsart die horizontale Pufferrundheit lediglich wegen der Anzeigeauffrischung vorgesehen ist. Die Software des Prozessors 20 zur Anzeigeaktualisierung muß die physikalische Begrenzung des Anzeigepufferspeichers erkennen, wenn sie Bilddaten in den Puffer schreibt. Ist die linke oder rechte Pufferbegrenzung erreicht (z. B. beim inkrementalen Aktualisieren zum Verschieben), muß die Software die Aktualisierung an der Begrenzung abschneiden und die Aktualisierung an der gegenüberliegenden Begrenzung fortsetzen. Nur die Rekonstruktion des Ringpuffers zum Anzeigebildschirm erfolgt gemäß der vorstehenden Beschreibung.
- Bisher wurde die Adreßtransformation ignoriert, die zum Erreichen der vertikalen Pufferrundheit notwendig ist. Die vertikale Rundheit wird durch "Adreß-Aliaserzeugung" erreicht. "Aliaserzeugung" bedeutet das Duplizieren von Speicherblöcken in der Prozessoradreßtabelle durch Ignorieren von Adreßbits im Adreßdecodierverfahren.
- Die Adressierungskonventionen des Prozessors TMS34010 der Firma Texas Instruments (der hierin als Mikroprozessor 20 verwendet wird) verwenden Bitadreßnamen und nicht die bei Mikroprozessoren verbreitete Byteadreßnomenklatur. Somit legt A0 ein Einzelbit im Speicher fest, A3 legt ein Byte fest, A4 ein Wort usw.
- In der 4BPP-Betriebsart ist der Ringpuffer ein einzelner Anzeigepuffer mit 256 Kilobytes. Mit den vorstehend beschriebenen Adressierungskonventionen legt das Adreßbit A20 fest, welche der beiden 128-Kilobyte-Anzeigepufferbänke aktiv ist, und das Bit A21 legt die obere Grenze des Anzeigespeichers fest. Durch Ignorieren des Bits A21 im VRAM-Auswahldecodierer 94 (Fig. 8) wird ein Alias- oder Duplikatbild des Anzeigespeichers über der zweiten Bank im Prozessoradreßraum erzeugt.
- Da die Unterseite des Puffers (d. h., das Alias) genau nach der Oberseite des Puffers (d. h., der Basis) beginnt, ist der Puffer um seine obere vertikale Begrenzung herum kontinuierlich (die Unterseite des Bildschirms läuft zur Oberseite um). Dadurch kommt die vertikale Komponente der Ringanzeigeoberfläche zustande. Die Anzeigeverwaltungssoftware kann den Anzeigeursprung beliebig im Basisadreßraum des Puffers plazieren. Die obere Speicherbegrenzung (Unterseite des Bildschirms) kann die Puffergrenze überlappen und die Aliasdaten anzeigen. Kreuzt der Anzeigeursprung die Pufferbegrenzung, muß er durch die Software sprungartig zur Unterseite des Basisadreßraums zurückgeführt werden. Schreibvorgänge zum Anzeigepuffer brauchen nicht an der oberen vertikalen Begrenzung abgeschnitten zu werden, wobei dies jedoch normalerweise der Verträglichkeit halber erfolgen kann.
- In der 1BPP-Betriebsart wird das Bit A19 ignoriert, um die Aliaserzeugung für die 64-Kilobyte-Puffer vorzunehmen. Das Adreßbit A19 wird durch das Chipauswahlsignal nicht decodiert, sondern das höchstwertige Bit der VRAM-Zeilenadressen. Ein Multiplexer 130 (Fig. 12) ersetzt das Bit A20 für das Bit A19 während der RAS-Zeit in der 1BPP-Betriebsart, um die Aliaserzeugung für den Speicher an den richtigen Grenzen vorzunehmen. Die 1BPP-Puffer, für die eine Aliaserzeugung vorgenommen wurde und die in der Speichertabelle von Fig. 14 gezeigt sind, werden ähnlich wie der einzelne 4BPP-Puffer behandelt, für den eine Aliaserzeugung erfolgt, um die vertikale Komponente der Ringanzeigefläche für zwei oder vier 1BPP-Ringpuffer zu erzeugen.
- Der Fachmann wird erkennen, daß die zum Aufbau des Ringpuffers bei 1BPP verwendeten Techniken nicht auf die beschriebene VRAM-Erzeugung mit 64 Kilobytes x 4 beschränkt sind. Beispielsweise könnten 258-Kilobyte x 4-VRAMs mit dem Lademerkmal für geteilte Zeilen zusammen mit dem Grafikmikroprozessor TMS34010 verwendet werden, um acht 1BPP-Ringpuffer bei 1024 x 512 durch vier VRAMs vorzusehen.
- In Fig. 15 bis 18 ist die Bildsteuerlogik 32 näher dargestellt. Vorzugsweise ist die Bildsteuerlogik 32 durch eine anwendungsspezifische integrierte Schaltung oder als Teil dieser implementiert.
- Die Bildsteuerlogik 32 erfüllt mehrere Funktionen. Ein Bankdecodier-PAL 131 decodiert das obere Adreßbit des VRAM- Bereichs, um ein "Bankauswahl"-Signal für die beiden VRAM- Bänke zu liefern. Die Steuerlogik erzeugt die erforderlichen Schiebetakte für die VRAM-Schieberegister. Sie sieht eine Bilddaten-Fließbandsteuerung vor, damit die Bildverschiebung mit einer Auflösung von einem einzelnen Bildpunkt sowohl in der 4BPP- als auch in der 1BPP-Betriebsart stattfinden kann. Außerdem sieht die Bildsteuerlogik 32 die Bilddaten-Fließbandsteuerung vor, um nur eines von vier Bilddatenwörtern für die 1BPP-Betriebsart zu erfassen (zuvor diskutiert).
- Die Bildsteuerlogik 32 weist mehrere Steuerregister auf, die allgemein mit der Bezugszahl 132 bezeichnet und näher in Fig. 16 gezeigt sind. Zur Bildsteuerlogik 32 gehören außerdem eine Bilddaten-Fließbandsteuerung und ein Bilddaten-Fließband (näher in Fig. 17 bzw. 18 gezeigt) mit einem Zwischenspeicher 134 zum Speichern von Bilddaten, einer Folgesteuerung 136 und einem Multiplexer 138 zum Multiplexen des Bilddatenbusses herunter auf einen 4BPP- oder 1BPP-Bildstrom. Bankadreßdecodierung und Bildbusmultiplexen erfolgen auf herkömmliche Weise, wie der Fachmann erkennen wird. Die nachfolgende Diskussion konzentriert sich auf für die Erfindung eindeutig bestimmte Aspekte der Bild-Fließbandsteuerung.
- Um eine glatte Verschiebebewegung auf der Anzeige 16 zu erreichen, muß der Anzeigeursprung (in beiden Anzeigebetriebsarten) mit einer Auflösung von einem Bildpunkt positioniert werden. Die Folgesteuerung 136 für die Bild-Fließbandsteuerung, ein Taktgenerator 140 und ein Fließbandverzögerungs-/Bildpunktselektor 142 positionieren den Anzeigeursprung bedarfsgemäß.
- Das Signal BLANK vom Prozessor 20 nimmt den Wert "falsch" am Anfang einer aktiven Anzeigeabtastzeile an und signalisiert dadurch, daß der Strahl der Kathodenstrahlröhre (CRT) zum Schreiben auf den Anzeigebildschirm einzuschalten ist. Die auf dem TMS34010 basierende Hardware fügt zumeist dem Signal BLANK eine externe Verzögerung zu, um Fließbandverzögerungen auf dem Bildmultiplexerweg zu kompensieren. Die Bildsteuerlogik 32 verzögert das Signal BLANK um eine zusätzliche feste Zeitdauer. Außerdem verzögert die Steuerlogik 32 das Takten von Bilddaten auf dem Fließband um eine variable Zeitdauer. Der Prozessor 20 kann die variable Bildverzögerung ("PAN-Verzögerung") über ein "Verschiebe"-Register 144 (Fig. 16) in vier Schritten in der 4BPP-Betriebsart und in sechzehn Schritten in der 1BPP-Betriebsart programmieren. Die größte Bildverzögerung positioniert den ersten aus dem Bildweg auszutaktenden Bildpunkt, sofort nachdem das verzögerte Signal BLANK den Wert "falsch" annimmt. Kleinere Verzögerungen bewirken das Austakten eines oder mehrerer Bildpunkte, wobei das Signal BLANK den Wert "wahr" hat, die dadurch in der Anzeige verdeckt sind. Die minimale Verzögerung verdeckt drei Bildpunkte (in der 4BPP-Betriebsart) oder fünfzehn Bildpunkte (in der 1BPP-Betriebsart). Somit kann der Anzeigeanfangspunkt auf eine Einzelbildpunktgrenze unter Verwendung des Verschiebe-Registers 144 im Zusammenwirken mit dem Anzeigeanfangsregister des Prozessors 20 positioniert werden. Die maximale Verzögerung führt zum minimalen Horizontalversatz des Anzeigeursprungs.
- Ein Bildtaktregister sieht die Softwareauswahl der Punkttaktquelle und -rate und das Zuführen der Taktrate zur internen Bildtakterzeugungslogik des 34010 vor. Dadurch können die unterschiedlichen vorgenannten Anzeigemonitortechnologien mit softwaregesteuerter Auswahl und der üblichen Praxis gemäß verwendet werden.
- Ein Bildkonfigurationsregister dient zum Softwarezugriff auf Steuerbits, um verschiedene Betriebsarten der Bildsteuerlogik und der Ausgabestufe (Digital-Analog-Wandler) auszuwählen. Zu den Steuermöglichkeiten gehören: Auswahl der 1BPP- oder 4BPP-organisation des Anzeigespeichers; Freigabe, Polarität und zusammengesetzte Erzeugung für Monitor-Synchronisierimpulse; Ausgangspegel des D/A-Wandlers bei Austastung (SETUP); und hardwareseitiges Zweierpotenz-Zoom. Mit Ausnahme des ZOOM-Merkmals wurde die Funktion der Steuerbits vorstehend erläutert oder dürfte dem Fachmann deutlich sein.
- Wünschenswert ist, die Dokumentenvergrößerungsvorrichtung der Erfindung mit herkömmlichen Femsehempfängern (über einen Modulator) zu betreiben. Solche Empfänger verwenden eine Strahlabtasttechnik im Zeilensprung, bei der sich 525 horizontale Zeilen für jedes Vollbild durch Rasterabtastung zweier ineinandergeschachtelter Halbbilder mit jeweils 262,5 Zeilen ergeben. Die Halbbildfrequenz beträgt etwa 60 Hz, während die Vollbildfrequenz 30 Hz beträgt. Obwohl auf normalen Femsehbildern kein merkliches Flimmern auftritt, ist weitgehend anerkannt, daß hochgradiges Anzeigeflimmern entsteht, wenn horizontale Zeilen einer Abtastzeile in der Breite dargestellt werden (die nur im Verlauf eines Teilbilds mit 30 Hz Frequenz aufgefrischt werden) oder wenn kontrastreiche Bilder angezeigt werden.
- Da digital abgetastete Druckdokumente häufig Zeilen mit einem einzelnen Bildpunkt in der Breite enthalten und da es vorteilhaft ist, daß die DDM die höchstmöglichen Kontrastwerte liefert, kann die folgende hardwareseitige Zoomstrategie zur Verwendung mit Femsehempfängern verwendet werden.
- Zunächst werden die internen Bildeinrichtungsregister des Grafikprozessors TMS34010 so eingerichtet, daß sie 262- Zeilen-Teilbilder mit 240 aktiven Anzeigezeilen identischer Daten bei einer Frequenz von 60 Hz vorsehen. Damit wird die Zeilensprungtaktung des Fernsehempfängers umgangen, und es ergibt sich ein hochstabiles 262 Zeilen hohes Bild. Dies hat den Effekt einer Vergrößerung des Bilds auf dem Bildschirm um das Zweifache in vertikaler Richtung über eine ordnungsgemäße Zeilensprunganzeige mit 480 aktiven Zeilen je Vollbild
- Zweitens erzeugt die Zoomlogik, die durch das Bit "ZOOM" im Konfigurationsregister gesteuert wird, eine entsprechende Vergrößerung in horizontaler Richtung, um Bilder ohne Verzerrung im Seitenverhältnis darzustellen. Durch das ZOOM-Bit kann ein Taktsperrsignal erzeugt werden, das die Bild-Fließbandsteuerung und das Datenfließband veranlaßt, mit halber Geschwindigkeit zu arbeiten. Somit wird alle zwei Punkttakte ein neuer Bildpunkt zum Monitor ausgegeben. Anstelle von 640 werden 320 horizontale Bildpunkte erzeugt, was zur gewünschten horizontalen Vergrößerung führt.
- Somit wird deutlich, daß die hardwareseitige Zweierpotenzvergrößerung vorgesehen ist, um Flimmern auf einem Fernsehempfänger zu beseitigen, der zur Seitenanzeige dient. Die hardwareseitige Vergrößerung wird nicht als Ergänzung der später beschriebenen softwareseitigen Zoomtechniken benötigt.
- Die Folgesteuerung 136 für die Fließbandsteuerung (näher in Fig. 17 gezeigt) hat vier Betriebszustände: "Idle" (Ruhe), "Load" (Laden), "Delay" (Verzögern) und "Go" (Gehen). Die Folgesteuerung befindet sich im Idle-Zustand, während das Signal "BLANK" den Wert "wahr" hat. Hat das Signal BLANK den Wert "falsch", erfolgt der Eintritt in den Load-Zustand. Dies bewirkt, daß das erste Bilddatenwort aus dem VRAM 30 ausgetaktet und im Halteregister 134 des Bild-Fließbands erfaßt wird. Nach dem Laden des ersten Worts (angezeigt durch das Signal "Load Done") tritt die Folgesteuerung 136 in den Delay-Zustand ein, stoppt den Taktgenerator und veranlaßt den Fließband-Verzögerungszähler 142, die Zeit der PAN-Verzögerung zu überschreiten. Nach Abschluß der PAN-Verzögerung (angezeigt durch das Signal "Delay Done") tritt die Folgesteuerung 136 in den Go-Zustand ein, wobei sowohl der Fließband-Taktgenerator 140 als auch der Bildpunktauswahlzähler 142 freigegeben sind. Der Bildpunktauswahlzähler 142 dient außerdem zur Zeitfestlegung der variablen Verzögerung und zum Zuführen von Bildpunktauswahlsignalen zum Bild-Multiplexer 138.
- In der 1BPP-Betriebsart taktet der Fließband-Taktgenerator 140 ein neues Bilddatenwort aus dem VRAM 30 alle vier Bildpunkttakte (in der üblichen Praxis als "punkt"-Takte bezeichnet) aus. Das Bildhalteregister wird jedoch einmal alle sechzehn Bildpunkttakte getaktet. Somit wird nur eines von vier Bilddatenwörtern erfaßt. Da sechzehn Bildpunkttakte zum Multiplexen des 16-Bit-Bilddatenbusses herunter auf einen einzelnen Bildpunkt benötigt werden, wird ein kontinuierlicher Datenstrom erzeugt. Bildwörter für vier Zeilen werden in der 1BPP-Betriebsart auf einer einzelnen VRAM-Zeile (und somit in den Schieberegistern) verschachtelt, um den horizontal runden 1BPP-Puffer für 1024 Bildpunkte zu erzeugen.
- In der 4BPP-Betriebsart taktet der Fließband-Taktgenerator 140 ein neues Bilddatenwort aus den VRAM alle vier Bildpunkttakte aus. Ein Bildausgaberegister 145 wird ebenfalls alle vier Bildpunkttakte getaktet. Somit werden alle Bilddatenwörter durch das Bildausgaberegister 145 erfaßt.
- Gemäß Fig. 19 integriert ein Digital-Analog-Wandler (DAC) 146 die Synchronisation und Austasteinfügung auf wirtschaftliche Weise für monochrome Anwendungen und sieht eine Fähigkeit zur Farb- und Grauskalenanzeige vor. Der DAC 146 befindet sich am Prozessordatenbus, so daß der "Farbpaletten"-RAM im DAC initialisiert werden kann. Der DAC 146 kann mit dem Modell BT476 oder BT471 realisiert sein, die im Handel von der Firma Brooktree erhältlich sind.
- In einer alternativen Ausführungsform der Erfindung ist der DDM-Prozessor 14 unter Verwendung handelsüblicher Komponenten aufgebaut, um die erforderliche Fähigkeit zur Grafikverarbeitung (mit dem Aufbau der Ringanzeigeoberfläche) zu bieten.
- Beispielsweise könnte in einer alternativen Ausführungsform der DDM-Prozessor 14 unter Verwendung eines normalen "PC-AT"-Personalcomputers mit nachgerüsteter Grafikkarte aufgebaut sein, z. B. mit der Grafikkarte Pepper SGT, die im Handel von der Firma Number Nine Computer Corporation erhältlich ist. Die Karte Pepper SGT weist zwei Grafikprozessoren auf: einen Prozessor TMS34010 der Firma Texas Instruments und einen Chip 82786 der Firma Intel Corp. Der Mikroprozessor des Personalcomputers (z. B. ein Mikroprozessor Modell 80286, hergestellt von der Firma Intel) ist ein dritter Prozessor, der zur Datenverarbeitung zur Verfügung steht. Der Prozessor des Personalcomputers führt die E/A-Verarbeitung mit der Bildabtastersteuerung und der Trackball-Kopplung durch. Außerdem erledigt dieser Prozessor Rechenaufgaben, zu denen die übergeordnete Funktion der Dokumentenformatanalyse gehört.
- Der TMS34010 erfüllt grafikintensive Aufgaben, z. B. Bilddrehung zur Beseitigung der Schräglage geneigter Seiten sowie die softwareseitige Verkleinerung und Vergrößerung von Seitenbildern.
- Der Prozessor Intel 82786 baut die Ringanzeigeoberfläche aus dem Anzeigespeicher auf, der auf der Karte Pepper SGT zur Verfügung steht. Insbesondere enthält der Anzeigeprozessorabschnitt des Chips 82786 Hardware zum Implementieren von "Anzeigefenstern". Durch die Anzeigefenster können unterschiedliche Bereiche des Anzeigespeichers an vorbestimmten Stellen auf dem Anzeigebildschirm flexibel und gleichzeitig abgebildet werden. Vor der Abbildung auf dem Bildschirm können die Anzeigefenster unabhängig voneinander aktualisiert werden. Der Anzeigespeicher muß von den Mikroprozessoren 34010 und 82786 gemeinsam benutzt werden.
- Die Erfindung kann unter Verwendung von Software zum Erzeugen von Steuermöglichkeiten durch den Benutzer und Menüs sowie zum Durchführen der Dokumentendarstellung realisiert sein. Bei der digitalen Dokumentenvergrößerungsvorrichtung ist es nicht notwendig, daß der Benutzer das zu betrachtende Dokument manipuliert: er braucht es nur auf die Abtasterplatte während der anfinglichen Datenerfassung zu legen.
- Vorzugsweise wird die digitale Dokumentenvergrößerungsvorrichtung mit drei Knöpfen, einem Trackball und einem Rollrad bzw. Trackwheel gesteuert. In der bevorzugten Ausführungsform haben alle Steuerelemente für alle Betriebsarten eine durchgängige Funktion, und es braucht jeweils nur ein Steuerelement bedient zu werden. Das sich ergebende System kann von Körperbehinderten bedient werden und läßt sich leicht erlernen.
- Die digitale Dokumentenvergrößerungsvorrichtung der Erfindung kann in mehreren Betriebsarten verwendet werden, um dem Sehvermögen, dem Geschick und den Vorlieben eines Benutzers gerecht zu werden. Die Betriebsarten können mit einem Menüsystem ausgewählt werden, das Teil der Steuermöglichkeiten des Benutzers bildet. Das Menüsystem unterscheidet sich von den üblicherweise in Computersystemen verwendeten Balkenbzw. "Pull-down"-Menüs darin, daß es mit jeweils einem Steuerelement bedient sowie dynamisch in der Größe verändert und auf dem Bildschirm positioniert werden kann. "Aussehen" und "Eindruck" der Menüs sind speziell zum Einsatz bei starker Vergrößerung gestaltet.
- Durch die digitale Dokumentenvergrößerungsvorrichtung der Erfindung erfolgt eine Größenumwandlung (Zoomen) des Seitenpuffers zum Anzeigespeicher über ein eindimensionales oder zweidimensionales geglättetes Zoom.
- Das zweidimensionale geglättete Zoom ist im eindimensionalen Zoom integriert, so daß eine einzige Aufrufkonvention gilt. Das eindimensionale Zoom wird bei weniger als zweifacher Vergrößerung verwendet, da unterhalb dieses Werts keine Verbesserung der Bildqualität eintritt. Außerdem ist eine bessere Annäherung an die Potenzreihe möglich, wobei die für das Zoomverhältnis möglichen größeren Divisoren das eindimensionale Zoom verwenden. Das ein- und zweidimensionale Zoom zeigt beim Skalieren von sowohl Text als auch Grafik eine gute Funktion.
- Das eindimensionale Zoomen erfolgt durch einen erfindungsgemäßen eindimensionalen Interpolationsalgorithmus auf Tabellengrundlage. Wählt der Benutzer eine neue Zoomeinstellung aus, wird eine Tabelle mit Schablonen unter Verwendung des Interpolationsalgorithmus des nächsten Nachbarns aufgebaut (gemäß der Diskussion in H. S. Hou, Digital Document Processing, New York: Wiley, 1983, Seiten 61 bis 66, wobei dieser Beitrag hierin insgesamt als Literaturhinweis eingefügt ist). Normalerweise wird der Tabellenaufbau in weniger als 100 ms abgeschlossen. Anschließend wird der Anzeigepuffer aus dem Seitenpuffer durch wiederholtes Extrahieren eines Quellbild-Bitmusters, Verwenden dieses Musters zum Adressieren einer entsprechenden Schablone und anschließendes Kopieren der entsprechenden Schablone zum Anzeigepuffer aktualisiert.
- Der Grad der Vergrößerung oder Verkleinerung ist durch ein ganzzahliges Verhältnis festgelegt. Dieses ganzzahlige Verhältnis läßt sich aus einem breiten Wertebereich auswählen, vorzugsweise von 1/15 (Verkleinerung) bis 31/1 (Vergrößerung). Der Divisor legt die Anzahl von Bildpunkten fest, die aus einer Zeile des Quellseitenbilds zu extrahieren sind. Der Dividend legt die Anzahl von Bildpunkten fest, die zum Ringanzeigepuffer zu schreiben sind.
- Der Grafikmikroprozessor TMS34010 adressiert Bildspeicher auf der Grundlage einer Bitadresse. Der Prozessor kann automatisch ein Feld von Bits, beginnend an einer vorbestimmten Bitadresse, für Feldgrößen von einem bis 32 Bits extrahieren. Die Bitadresse kann automatisch durch die Feldgröße inkrementiert werden, nachdem ein Feld abgerufen wurde. Durch diese Fähigkeiten kann ein sehr rationeller Zoomalgorithmus implementiert werden.
- Bei Festlegung eines neuen Zoomverhältnisses (Vergrößerung oder Verkleinerung) wird eine neue Zoomtabelle mit Schablonen wie folgt aufgebaut: Für Quellwerte von 0 bis 2 bis zur n-ten Potenz (worin n die Quellfeldgröße ist) wird eine Zielfeld-"Schablone" mit Hilfe des Algorithmus des nächsten Nachbarns berechnet. Bei Verkleinerungen wird die Zielfeldschablone aufgebaut, indem Bildpunkte gelöscht, Bildpunkte mit einer logischen ODER-Operation kombiniert (für Verkleinerungen bis zu 1/2) oder Bildpunkte einer Mittelwertbildung (für Verkleinerungen "unter" 1/2) unterzogen werden (modifizierter nächster Nachbar). Die Zielfelder werden in die Tabelle gemäß der ersten binären Potenzgröße geladen, die das Zielfeld enthalten kann (die "Tabelleneintragsgröße", die z. B. ein, zwei oder vier Bits usw. sein könnte). Für Vergrößerungen sind die Tabelleneinträge mit einer Größe von 32 Bits festgelegt.
- Die eigentliche Zoomoperation wird durch einen rechtekkigen Bereich im Quellseitenbildpuffer und eine lineare Anzeigeadresse festgelegt. Danach erfolgt das Zoom durch Extrahieren eines Quellfelds, dessen Multiplizieren mit der Tabelleneintragsgröße unter Verwendung einer Schiebeoperation zum Bilden einer Adresse, Verwenden dieser Adresse zum Zugriff auf die Tabelle der Schablonen und Schreiben einer Schablone aus der Tabelle zum Anzeigepuffer.
- Zoomverhältnisse zur Vergrößerung oder Verkleinerung werden normalerweise für die größtmöglichen Feldgrößen in Übereinstimmung mit einer maximalen Tabellengröße von 16 Kilobytes ausgewählt. Dadurch wird die Geschwindigkeit der Zoomoperation gegenüber der Geschwindigkeit des Tabellenaufbaus optimiert. Beispielsweise ist eine zweifache Vergrößerung mit 24/12 und nicht 2/1 festgelegt. Obwohl beide Verhältnisse funktionieren, bewirkt die Auswahl von 24/12 anstelle von 2/1, daß das Zoomen nahezu zwölfmal schneller läuft.
- Dokumentbilder, die auf das Zwei- oder Mehrfache der Grundauflösung des abgetasteten Bilds vergrößert werden (das Zwölffache der optischen Leistung für einen Bildschirm von vierzehn Inch) werden während der Aktualisierung des Anzeigepuffers "fliegend" geglättet. Die Bildglättung erfolgt durch schnelles, nichtlineares "zweidimensionales Schablonen"-Nachschlagen, das in einer einzigen Operation vergrößert und glättet. Durch Glätten wird das treppenartige Aussehen digital vergrößerter Bilder aller Arten beseitigt. Im Gegensatz zur Erfindung müssen Vergrößerungsvorrichtungen auf Computergrundlage besondere "Glättungszeichensätze" verwenden, was einen auf computerresidenten Text beschränkten Ansatz darstellt (keine abgetasteten Bilder).
- Der Glättungsinterpolator der Erfindung extrahiert ein Feld von Quellbildpunkten und konstruiert ein "Codewort", das zum Adressieren einer zum Anzeigepuffer zu schreibenden Schablone verwendet wird. Der Glättungsinterpolator verwendet ein zweidimensionales Feld von Quellbildpunkten (3 Bildpunkte im Quadrat), um das Codewort auf ähnliche Weise wie beim vorstehend beschriebenen eindimensionalen Interpolationsalgorithmus zu konstruieren.
- Das Quellbild wird in quadratischen Nachbarschaften abgetastet, die sich an zwei angrenzenden Kanten überlappen. Eine Überlappung ist notwendig, um Fälle mit dünnen Linien richtig behandeln. Die Überlappung wurde so ausgewählt, daß sie an der "rechten" und "unteren" Abtastkante auftritt (wobei oben links als Bildursprung verbleibt), um die bedarfsweise Verarbeitung sich inkremental aktualisierender Quellrechtecke durch die Anzeigearchitektur der digitalen Anzeigevergrößerungsvorrichtung zu vereinfachen. Somit wird für jede abgetastete Fläche von n mal n Bits eine Fläche von (z * (n-1)) x (z * (n-1)) zum Anzeigepuffer geschrieben (worin z das Zoomverhältnis ist). Bei einer Quellnachbarschaft von 3 x 3 lassen sich z. B. Zoomverhältnisse von 4/2, 5/2, 6/2, ... 16/2 gewinnen.
- Eine Quellnachbarschaft von 3 x 3 Bildpunkten ist zur Minimierung von Speicheranforderungen bevorzugt. Die Nachbarschaft ergibt ein 9-Bit-Codewort, wenn Felder aus drei benachbarten Zeilen zusammengestellt werden. Dies führt zu einer Tabelle mit 512 Einträgen (2&sup9;). Zur Vergrößerung bis auf das Achtfache der Auflösung des abgetasteten Bilds (etwa die 50fache optische Leistung) müssen die Schablonen in der Tabelle sogar 16 mal 16 Bildpunkte groß sein (Zoomverhältnis 16/2). Die resultierende Tabelle hat eine Größe von 16 Kilobytes. Es könnte eine größere Quellnachbarschaft ausgewählt werden (z. B. eine Nachbarschaft von 4 x 4), die jedoch einen wesentlich größeren Speicher benötigen würde.
- Die durch den Glättungsinterpolator konstruierten Schablonen sind "vorgeglättet". Die Schablonen entsprechen den Bildkonturen auf der Grundlage von linearen Annäherungen im Winkel von 0, 30, 45, 60 und 90 Grad. Dies sind alle Informationen über Formen, die sich auf der Grundlage einer Quellnachbarschaft von 3 x 3 Bildpunkten ableiten lassen. Für den erforderlichen Vergrößerungswert (das Zwei- bis Achtfache der Grundauflösung des Abtasters) erzeugt diese Annäherung den Anschein geglätteter Konturen im vergrößerten Bild.
- Die Schablonen werden in einem zweistufigen Verfahren generiert. Beim Initialisieren der Software der digitalen Dokumentenvergrößerungsvorrichtung wird eine Funktion "Schablonensuche" durchlaufen, mit der die "Regeln" zum Zeichnen der Schablonen auf der Grundlage geometrischer Prinzipien "erkundet" werden. Im Anschluß wird auf der Grundlage der zuvor erzeugten Regeln ein neuer Satz von 512 Schablonen in die Tabelle "eingezeichnet" und gemäß dem ausgewählten Zoomverhältnis in der Größe eingestellt.
- Das Verfahren des "Schablonensuchens" kann als Erkundung nicht reduzierbarer Muster oder "Grundklassen" in den 512 möglichen Mustern von 3 x 3 Bildpunkten beschrieben werden. Der erste Schritt dieses Verfahrens wird als "Aufteilen" bezeichnet und versucht, zwei Grundmuster zu identifizieren, die mit einer logischen ODER- oder einer logischen UND-Operation kombiniert werden können, um das betreffende Muster zu bilden.
- Das Aufteilen von "Einsen" erfolgt, wenn benachbarte "Nullen" in der Mitte eines Musters festgestellt werden (horizontal, vertikal, diagonal und diagonal über einen Quadranten). Das so festgestellte Muster wird durch Maskieren des Musters in zwei Grundmuster aufgeteilt, die mit einer logischen ODER-Operation zur Musterbildung kombiniert werden können. Das Muster wird als "ODER-Verkettungs"-Typ markiert und mit den Codes der beiden konstituierenden Grundmuster (unter Verwendung einer Liste von Datenstrukturen, die durch einen Mustercode indiziert sind) verknüpft. Ein analoges Aufteilen von "Nullen" erfolgt zur Feststellung von Mustern, die mit einer logischen UND-Operation kombiniert werden können und als "UND-Verkettungs"-Typ markiert werden.
- Die Aufteilungsreihenfolge ist wichtig, da einige Muster auf mehr als eine Weise aufgeteilt werden können. Insbesondere muß entschieden werden, ob dünne diagonale Räume (ein Bildpunkt) oder diagonale Linien beibehalten werden. Diese Entscheidung ist mehrdeutig (und sich gegenseitig ausschließend), aber wichtig. Möglicherweise ist es wichtiger, eher dünne Segmente von Zeichen als dünne Bereiche aufzulösen, die Zeichen im Textmaterial trennen. Folglich werden vorzugsweise diagonale "Nullen" aufgeteilt, bevor diagonale "Einsen" aufgeteilt werden.
- Die Aufteilungsmuster bilden eine Baumstruktur derart, daß Komponenten einer Aufteilung selbst weiter aufgeteilt werden können. Nach Abschluß aller Aufteilungen werden die Verkettungstypen nach Baumtiefe geordnet.
- Für die übrigen Grundcodes erfolgen Drehungen und Spiegelungen, um Muster weiter zu zerlegen. Für die verbleibenden Bitmuster wird das erste Auftreten eines Musters als "Grund"- Klasse beibehalten. Nachfolgende Muster, bei denen durch Drehung und/oder Spiegelung eine Übereinstimmung mit einem Grundtyp festgestellt wird, werden mit "Übersetzungs"-Klasse, dem Code des übereinstimmenden Grundmusters und einem Drehungs- und Spiegelungscode markiert.
- Die sich ergebenden vierzehn Grundklassenmuster weisen auf: zwei Vollmuster, zwei Muster mit gerader "Kante", sechs Muster mit 45º-Ecke und vier Muster mit 30º-Ecke. Alle anderen Muster lassen sich aus diesen vierzehn Grundtypen erzeugen.
- Obwohl in den vorstehenden Absätzen der beschreibende- Begriff "Muster" großzügig verwendet wurde, verarbeitet die Software zum Schablonensuchen im Grunde ausschließlich lineare 9-Bit-Codewörter und nicht die durch die Codewörter dargestellten zweidimensionalen Nachbarschaften. Die Zerlegungsschritte erfolgen alle vom Wesen her in einem einzigen Durchgang. Somit läuft das gesamte einmalige Schablonensuchverfahren wesentlich kürzer als eine Sekunde.
- Die Schablonenerzeugung erfolgt in umgekehrter Reihenfolge wie das Schablonensuchen. Die vierzehn Grundmuster werden in die Schablonentabelle an Positionen (Tabellenversatz) entsprechend ihren Codes "eingezeichnet". Den vierzehn Grundmustern werden Parameter zum Zeichnen auf der Grundlage von festen "Zeichnungsregeln" zugewiesen. Obwohl diese Zeichnungsregeln durch ein automatisches Verfahren "erkundet" werden könnten, werden die Regeln vorzugsweise durch Codieren einer geeigneten "Regeltabelle" zugewiesen. Die Zeichnungsregeln sind so ausgewählt, daß sich alle vierzehn Grundmuster glatt an ihren Grenzen zusammenfügen.
- Die Muster der Grundklasse vom Eckentyp werden auf der Grundlage des Modells des Füllens eines Quadrats (mit der Größe der Schablone beim gewählten Zoomverhältnis) mit "Einsen" gezeichnet, beginnend an einer ausgewählten Ecke und bis zu einer Abschneidelinie, die durch den Anstieg und den Abschnitt auf der y-Achse festgelegt ist. Für jedes ausgewählte Zoomverhältnis wird der Abschnitt auf der y-Achse auf der Grundlage einer "Kantenregel" aus der Regeltabelle neu berechnet. Das Zeichnen von Kanten- und Volltypen ist bekannt.
- Die Muster der "Übersetzungs"-Klasse könnten durch Drehen und Spiegeln gezeichneter Grundklassenmuster auf der Grundlage der gespeicherten Drehungs- und Spiegelungscodes erzeugt werden. Bevorzugt ist jedoch, die Zeichnungsparameter zu übersetzen und die 52 Schablonen der "Übersetzungs"-Klasse neu zu zeichnen.
- Die Schablonen der "Verkettungs"-Klasse werden durch Kopieren einer der Komponentenschablonen zur neuen Schablone und anschließendes Kopieren der zweiten Komponente "darüber" mit Hilfe einer logischen Kombinieroperation gebildet, die durch den Prozessor TMS34010 bereitgestellt wird. Die Schablonen werden in umgekehrter Reihenfolge der Baumtiefe (gemäß der Feststellung beim zuvor beschriebenen "Schablonensuchen") so kombiniert, daß gewährleistet ist, daß die beiden zur Kombination erforderlichen Schablonen bei Bedarf vorhanden sind.
- Vom Konzept her ähnelt das Zoomen unter Verwendung der zweidimensionalen geglätteten Schablonen dem der eindimensionalen Schablonen, aber die Realisierung unterscheidet sich. Anstelle des Extrahierens von Feldern mit dem Befehl MOVE FIELD ist wegen der Überlappung von Quellnachbarschaften die Feldextraktion durch Verschiebungen rationeller. Bilddaten für eine Fläche mit einer Höhe von drei Zeilen und einer Breite von 32 Bits werden aus dem Seitenpuffer im DRAM abgerufen, in drei der 32-Bit-Register des Prozessors geladen und anschließend verschoben und kombiniert, um bis zu fünfzehn aufeinanderfolgende Codewörter zum Adressieren von Schablonen zu bilden, die zum Anzeigepuffer zu kopieren sind. Zur weiteren Leistungsverbesserung werden die Inhalte der drei 32-Bit- Register jedesmal geprüft, wenn in sie geladen wird. Ergibt die Prüfung durchgängig "Einsen" oder durchgängig "Nullen", wird das Nachschlagen in der Tabelle umgangen, und es wird ein einzelner Befehl "FILL" des TMS34010 ausgeführt, um den entsprechenden Anzeigepufferbereich zu füllen.
- Durch die digitale Dokumentenvergrößerungsvorrichtung der Erfindung kann die Größe des angezeigten Bilds in Potenzreihen-Inkrementen geändert werden (sowohl beim ein- als auch zweidimensionalen Zoomen). Vergrößerungsvorrichtungen auf der Grundlage von Computern beschränken die Größenänderung (Zoom) auf ganzzahlige Werte, die nicht um gleiche Maße größer oder kleiner erscheinen. Somit läßt sich durch die digitale Dokumentenvergrößerungsvorrichtung der Erfindung der optimale Zoomwert leichter und genauer ermitteln.
- Die vorgesehenen Größeninkremente (Zoominkremente) nähern sich einer Potenzreihe stark an. Eine Potenzreihe hat die Eigenschaft, daß sich die Folge von so ermittelten Verhältnissen in gleichen Schritten erhöht oder verringert. Dies simuliert den Betrieb eines optischen Zooms. Eine Potenzreihe ist wünschenswert, da die benötigte Anzahl von Schritten zum Einstellen des Bilds auf Optimalgröße minimiert wird. Dies ist wichtig, da jeder Größenschritt bis zu einer Sekunde benötigt, um den Anzeigepuffer vollständig zu überschreiben. Die Potenzreihe läßt sich als 1,125 hoch x ausdrücken, worin x im Bereich von -12 bis +20 liegt. Jede Annäherung an diese Potenzreihe ist als ganzzahliges Verhältnis (der Verkleinerung oder Vergrößerung) festgelegt, das im Bereich von 1/12 bis 31/1 liegen kann.
- Die automatischen Seitenmanipulationsmerkmale der digitalen Dokumentenvergrößerungsvorrichtung werden durch Softwareanalyse des abgetasteten Dokumentenformats möglich. Zu diesen Manipulationsmerkmalen gehören: virtuelle Einlinien- Anzeigebetriebsart, Spaltennachlauf, automatische Blenden, automatischer Randbegrenzer, automatische Übersichtsgrößeneinstellung, automatische Beseitigung der Schräglage geneigter Seiten und automatisches Segmentieren von Grafikbildern. Die Software des Formatanalysators baut eine Beschreibung der Seite in Form einer Hierarchie von Datenstrukturen auf, um anschließend das Seitenbild neu zusammenzusetzen. Die Datenstrukturen definieren rechteckige Flächen, die Seitenmerkmale einschließen, z. B. Wörter, Textzeilen, Spalten, Grafikbilder und Ränder. Danach wird die resultierende Seitenbeschreibung zu einem kompakteren Matrixfeld von "Seitendeskriptoren" in Lesereihenfolge übertragen.
- Der Formatanalysator baut die Seitenbeschreibung in einem Mehrschrittverfahren auf, wobei bestimmte vorhergehende Schritte auf der Grundlage gesammelter statistischer Informationen uber wichtige Seitenmerkmale umgekehrt und erneut durchlaufen werden, zu denen gehören: Seitenschräge (Neigung), Grundlinienpositionen von Textwörtern und Zeilen, Wortabstand, Hähe von Textzeilen (um auf Textzeichensatzgrößen zu schließen) und Abstand von Textzeilen (um eng gesetzte und sich berührende Textzeilen wiederherzustellen). Außerdem werden im Verlauf der Seitenanalyse nichtstatistische Informationen erfaßt, zu denen gehören: Position von Grafiklinierungen, Position von grafischen Grundmustern und Bildern sowie Position von Überschriften in großformatigem Zeichensatz.
- Im folgenden wird der Steuerablauf des Formatanalysators zunächst allgemein beschrieben, wonach nähere Beschreibungen der Softwarekomponenten des Analysators folgen. In den nachfolgenden Beschreibungen wird folgende Konvention für die Nomenklatur verwendet: Elemente in Großbuchstaben sind Bezugnahmen auf Datenobjekte (d. h., Strukturen). Elemente in Kleinbuchstaben, gefolgt von einer leeren Klammer "()" sind Bezugnahmen auf Unterprogrammaufrufe (d. h., Funktionen der Sprache "C").
- Die zeitintensivsten Verarbeitungsfunktionen des Formatanalysators auf der untersten Ebene sind so gestaltet, daß sie parallel zum Abtastverfahren ablaufen. Durch Durchführung der Formatanalyse an den ankommenden Bilddaten wird die erforderliche Gesamtzeit verkürzt, bevor ein Benutzer mit der automatischen Betrachtung des Seitenbilds beginnen kann. Dies verbessert die Reaktionszeit gegenüber einem System, das auf den Abtastabschluß wartet, bevor es mit dem Formatanalyseverfahren beginnt.
- Der erste Schritt im Formatanalyseverfahren, ein Aufruf des liner(), baut erste TEXT_LINE-Strukturen auf dem zugeführten Zeilenkopf auf. Dazu ruft der liner() den worder() auf, um TEXT_WORD-Strukturen auf der konstituierenden TEXT _-LINE aufzubauen. Auf analoge Weise verläuft der Steuerablauf absteigend über worder()-, filter()-, box()- und runenc()- Funktionen bis hinunter auf die Ebene des gepufferten Punktraster-Seitenbilds (der Seitenpuffer wurde zuvor beschrieben). Der Weg des absteigenden Funktionsaufrufs in diesem Verfahren verläuft parallel zu den so erzeugten hierarchisch verknüpften (Baum-)Datenstrukturen: TEXT_LINEs, TEXT_WORDs, BOXes und RUNs. Diese Strukturen werden inkremental (stapelweise) aufgebaut, so daß diese Verarbeitungsphase gleichzeitig mit der Erfassung von Bilddaten im Seitenpuffer ablaufen kann.
- Jede der vorgenannten Datenstrukturen enthält die Koordinaten eines RECTANGLE, das das entsprechende Seitenmerkmal einschließt (das "begrenzende Rechteck") und Verknüpfungsfelder (Zeiger) NEXT und PREVIOUS enthält, die zum Aufbau verknüpfter Listen von Strukturen des gleichen Typs dienen. Außerdem enthält jede Datenstruktur Verknüpfungsfelder HEAD und TAIL, die zum Aufbau verknüpfter Listen von Strukturen auf der nächstniedrigeren Ebene dienen und Felder zum Speichern statistischer Informationen aufweisen können, die speziell zu der Ebene der Struktur gehören.
- Um den Speicherbedarf zur Aufnahme des Datenstrukturbaums zu verringern, werden bestimmte der Strukturen der niedrigeren Ebene in der Zuordnung aufgehoben bzw. freigegeben (verworfen), nachdem sie zum Aufbau der konstituierenden Struktur der nächsthöheren Ebene verwendet wurden. Dies geschieht, wenn die y-Koordinate der Buddatenerfassung merklich über die Unterseitenkoordinate des begrenzenden Rechtecks für die konstituierende Struktur der höheren Ebene hinaus fortgeschritten ist. Dabei wird die Struktur der höheren Ebene zur Verwendung durch die Funktion der nächsthöheren Ebene freigesetzt. Insbesondere werden die RUNs nach Freisetzung der BOXes zum worder() verworfen, und die BOXes werden nach Freisetzung der TEXT_WORDs zum liner() verworfen.
- Die vorgenannte filter()-Funktion verwirft BOXes, die sich als Seiten-"Rauschen" vor der Worterstellung erweisen. Der filter() verknüpft außerdem BOXes, die als "Grafik" identifiziert werden, mit einem separaten GRAPHIC_BOX_HEADER zur nachfolgenden Verarbeitung. Solche BOXes werden nicht zum worder() geführt und daher von ihm nicht verworfen.
- Bevor TEXT_WORDs zum liner() freigesetzt und BOXes verworfen werden, verwendet der worder() BOXes, um Grundlinien für TEXT_WORDs zu ermitteln. Die TEXT_WORD-Grundlinien dienen zur Abschätzung der Seitenneigung und sind außerdem entscheidend für das nachfolgende statistische Filtern der Seitenbeschreibung. Für jedes TEXT_WORD werden zwei Grundlinien, eine obere und eine untere, ermittelt.
- Bei Beendigung des Abtastens der Seite wurden alle Teile des Seitenpuffers verarbeitet, um eine Liste von TEXT_LINEs mit beigefügten TEXT_WORDs sowie eine separate Liste von grafischen BOXes zu erzeugen. Die Grundlinien des ersten und letzten TEXT_WORD von TEXT_LINEs werden zum Ermitteln eines mittleren Neigungswerts für das Seitenbild verwendet. Wird eine merkliche Neigung festgestellt, erfolgt eine Beseitigung der Schräglage der Seitenbeschreibung durch Drehen der Koordinaten der begrenzenden Rechtecke der bisher aufgebauten Strukturen. Als nächstes werden die als grafische Elemente gekennzeichneten BOXes verarbeitet. Solche grafischen BOXes dienen zum Ausfiltern fremder TEXT_LINEs. Bestimmte grafische Elemente (z. B. Linierungen) werden dabei ebenfalls gekennzeichnet, da diese beim späteren Sortieren von Seitenspalten von Nutzen sind.
- Im Anschluß daran erfolgt ein statistisches Filtern von TEXT_LINEs. Diese Operation verwendet eine Korrelation von Grundlinien, um die Vereinigung mehrerer Textzeilen zu einer einzigen TEXT_LINE infolge von sich vertikal berührenden Zeichen auf der gedruckten Originalseite zu korrigieren.
- Die bisher aufgebauten TEXT_LINEs sind gegenüber einer Fragmentierung auf Dokumenten in Proportionalschrift anfällig. Der nächste Verarbeitungsschritt überwindet dieses Problem beim Ermitteln von Textspalten auf der Seite. Die TEXT _-LINEs werden von TEXT_WORDs befreit und verworfen. Anschließend werden die TEXT_LINES wieder aufgebaut und COLUMNs unter Verwendung eines Wortüberlappungs-Algorithmus ermittelt. Die sortierte Liste von COLUMNs wird danach einem abschließenden Satz von statistischen und heuristischen Filtern unterzogen.
- Die sich ergebende Liste von COLUMN-Strukturen wird anschließend durch den zoner() in Lesereihenfolge sortiert, der Überschriften anhand von Zeichensatzgröße und Überlappung feststellt und danach COLUMNs in y- und dann x-Reihenfolge unter den Überschriften schichtet. Die sortierten COLUMNs werden einer MARGIN-Struktur beigefügt, wobei ein begrenzendes Rechteck die äußersten COLUMN-Rechtecke einschließt.
- Nach Abschluß der Formatanalyse wird die Hierarchie der Datenstrukturen verwendet, um eine abschließende Seitenbeschreibung in Form eines kompakten Matrixfelds von "Seitendeskriptoren" zu erstellen, die aus den begrenzenden Rechtekken für die vorgenannten Seitenmerkmale bestehen, die in die richtige Lesereihenfolge für die Seite sortiert wurden. Anschließend wird der Baum von verknüpften Datenstrukturen freigegeben.
- Die untersten Ebenen des Formatanalysators bestehen aus dem boxer() und dem run_encoder(). Der boxer() ermittelt die Seitenkoordinaten von Rechtecken, die jeden einzelnen zusammenhängenden schwarzen "Fleck" (gewöhnlich Zeichen) auf dem abgetasteten Seitenbild einschließen. Dazu verwendet der boxer() eine modifizierte codierte Lauf längenform des Seitenbilds und verkettet zwei Typen von Datenstrukturen, die RUN und den BOX.
- Für jede Abtastzeile im Seitenbild führt der boxer() ein Matrixfeld von RUN-Strukturen zum run_encoder(). Der run encoder() ermittelt den ersten schwarzen Bildpunkt und letzten schwarzen Bildpunkt aufeinanderfolgender "Strecken" in Schwarz auf der Abtastzeile, wobei er die Bildpunktnummer des ersten schwarzen Bildpunkts in das Feld RUN START und die Bildpunktnummer des letzten schwarzen Bildpunkts in das Feld RUN END aufeinanderfolgender RUN-Strukturen auf dem Matrixfeld lädt. Der run_encoder() führt die Adresse der letzten RUN zurück, die so für die Abtastzeile geladen wurde.
- Anschließend vergleicht der boxer() die so ermittelten RUNs (die "Liste der ankommenden RUNs") mit den auf der vorhergehenden Abtastzeile ermittelten RUNs (die "Liste der aktiven RUNs"). Je Schleife berücksichtigt der boxer() eine ankommende RUN oder eine aktive RUN. Der boxer() verbraucht ankommende RUNs durch Zuweisen von BOX-Strukturen und Verknüpfen der RUN mit dem BOX und des BOX mit der RUN, bis er eine Überlappung zwischen einer ankommenden RUN und einer aktiven RUN (bereits einem BOX beigefügt) feststellt. Wenn dies geschieht, ermittelt der boxer() den BOX anhand der Verknüpfung in der RUN, vergrößert die Rechteckkoordinaten des BOX, um START und END der neuen RUN aufzunehmen, verwirft die aktive RUN und führt die Kreuzverknüpfung zur ankommenden RUN durch.
- Durch Ermitteln der ersten sich überlappenden RUNs hat der boxer() eine Synchronisierung zwischen den Listen der aktiven und ankommenden RUNs hergestellt. Der boxer() behält diese Synchronisierung über die gesamte Abtastzeile bei, indem er abwechselnd aktive und ankommende RUNs berücksichtigt. Durch dieses Verfahren brauchen keine RUNs zweimal zum Einschluß in BOXes berücksichtigt zu werden. Wird eine aktive RUN berücksichtigt, die keine ankommende RUN überlappt, ist ein BOX abgeschlossen. Der abgeschlossene BOX wird mit einer "Abschlußliste" verknüpft.
- Werden sich überlappende RUNs ermittelt, wobei die ankommende RUN bereits mit einem BOX verknüpft ist, so sind konvergente BOXes ermittelt worden. Die BOXes werden vereinigt, indem die RUN-Listen und Koordinaten des BOX vereinigt werden.
- Die resultierende "abgeschlossene" BOX-Kette enthält die x- und y-Koordinate für die linke obere und rechte untere Ekke eines Rechtecks, das vollständig einen zusammenhängenden "Fleck" in Schwarz vor dem weißen Seitenhintergrund einschließt. Innerhalb von Flecken verschachtelte und berührungsfreie Flecken (z. B. von einem Grafikrahmen eingeschlossene Textzeichen) werden separat und richtig durch BOXes beschrieben. Der BOX weist außerdem ein DENSITY-Feld auf, das die Anzahl von schwarzen Bildpunkten im BOX enthält (aber nicht andere BOXes, ungeachtet einer Überlappung oder eines Einschlusses von begrenzendem Rechtecken).
- Der boxer() führt keinen Rücksprung durch, bis 100 BOXes akkumuliert wurden oder das Ende des Dokuments erreicht ist (Abtastende).
- Die Kette von resultierenden BOX-Strukturen wird danach zum filter() geführt, um Seiten-"Rauschen" durch Verwerfen sehr kleiner BOXes zu beseitigen, die sehr wenige Bildpunkte enthalten. Damit wird "Schmutzfleckrauschen" beseitigt, das im Abtastverfahren auf schmutzigen oder schlecht gedruckten Dokumenten erzeugt wird. Außerdem wird das Feld BOX DENSITY mit der BOX-Fläche (berechnet anhand der Rechteckkoordinaten) verglichen. Rahmen mit sehr hohen DENSITY-Fläche-Verhältnissen und hohem x-y-Seitenverhältnis können als Linierungen zurückgewiesen werden, während große BOXes mit sehr geringer DENSITY als Grafikmerkmale (z. B. einschließende Grafikrahmen) zurückgewiesen werden.
- Die nächste Ebene des Formatanalysators, der worder(), gruppiert Stapel von ankommenden BOXes zu TEXT_WORDs, indem er nach Gruppen von BOXes sucht, die bestimmte Kriterien des horizontalen und vertikalen Angrenzens erfüllen. Da die ankommenden BOXes in jeder Reihenfolge eintreffen können und die Angrenzsuchvorgänge rationellerweise auf eine kleine Fläche begrenzt werden müssen, werden zum Sortieren zwei MESH- Matrixfelder verwendet.
- Jedes MESH ist ein zweidimensionales Matrixfeld von Zeigern auf TEXT_WORDs. Der x- und y-Index auf einem MESH-Matrixfeld entspricht der durch 64 geteilten Seitenpufferkoordinate. Somit hat ein MESH eine Zelle (Zeiger) für jeweils 64 Bildpunkte in sowohl der x- als auch y-Richtung auf dem Seitenbild. Jede Zelle (Zeiger) auf einem MESH ist der Kopf einer einzeln verknüpften Liste jener TEXT_WORDs mit einer Koordinate, die in die Zelle fällt. Die verwendete TEXT_WORD- Koordinate ist die linke obere Koordinate des äußersten BOX, angefügt am linken Ende, oder die rechte untere Koordinate des äußersten BOX, angefügt am rechten Ende eines TEXT WORD.
- Somit werden zwei MESHes, links und rechts, verwaltet, um separat nach angrenzenden BOXes an jedem Ende von TEXT_WORDs zu suchen. Folglich enthält jedes TEXT_WORD zwei Verknüpfungsfelder, eines für jede MESH-Liste.
- Beim Aufbau von TEXT_WORDs werden diese an die MESH-Matrixfeldern angefügt, um schnelle Suchvorgänge lokaler Bereiche zu ermöglichen und die Prüfung auf Angrenzen von BOXes an jedem Ende der TEXT_WORDs durchzuführen. Die Angrenzprüfungen sind vom Wesen her lokal und prüfen die Auswirkungen auf eine Formatanalyse der Neigung (die z. B. von falscher Ausrichtung eines Dokuments beim Abtasten herrühren kann). Das Verfahren ist inkremental, damit ein größtmöglicher Teil der Verarbeitung beim Abtasten erfolgen kann, um eine Verzögerung nach dem Abtasten zu verringern und eine Freigabe von BOXes bei ihrer Worterstellung zu ermöglichen. Dadurch wird ferner der Aufrufaufwand verringert und die Hintergrundspeicherung von Befehlen im 34010 verbessert.
- Zur Verarbeitung eines ankommenden Stapels von BOXes wird jeder BOX mit den BOXes an den Enden von TEXT_WORDs in den MESH-Zellen verglichen, die der linken und rechten Koordinate des BOX entsprechen. Wird kein TEXT_WORD mit einem angefügten BOX innerhalb des Zeichenzwischenabstands (x) und der Überlappung (y) als Schwellwert festgestellt, wird der ankommende BOX zum Erzeugen eines neuen TEXT_WORD verwendet. Wird ein TEXT_WORD mit einem angefügten angrenzenden BOX festgestellt, so wird der ankommende BOX mit der TEXT WORD- Liste von BOXes verknüpft, und das begrenzende Rechteck des TEXT_WORD wird vergrößert. Bei Feststellung von TEXT_WORDs mit angefügten BOXes, die an den ankommenden BOX an sowohl dem linken als auch dem rechten MESH angrenzen, werden die TEXT_WORDs vereinigt, indem Rechtecke und BOX-Listen kombiniert werden und ein TEXT_WORD verworfen wird. Für alle vorgenannten Operationen zur Erzeugung neuer Wörter, zum Wortwachstum und zur Wortvereinigung müssen die MESH-Matrixfelder ordnungsgemäß beibehalten werden.
- Sämtliche TEXT_WORDs in der richtigen Zelle beider MESHes müssen nach jedem BOX durchsucht werden, auch wenn ein Angrenzen an ein TEXT_WORD für diese Zelle festgestellt wurde. Grund dafür ist, daß Interpunktionszeichen (und der Punkt auf dem Kleinbuchstaben "i") dazu führen können, daß lokale Angrenzprüfungen versagen. Obwohl eine "globale" Angrenzprüfung eines ankommenden BOX an einem TEXT_ WORD-Rechteck (im Gegensatz zum vorstehend beschriebenen Fall BOX-an- BOX) keine intensiven Suchvorgänge erfordert, ist ein solches Verfahren gegenüber Seitenneigung sehr empfindlich.
- Werden ankommende BOXes angetroffen, die y-MESH-Koordinaten acht Zellen unter jenen entsprechen, die beim Erstaufruf des worder() gefüllt wurden, werden TEXT_WORDs aus den ersten zwei Reihen von so gefüllten MESH-Zellen entfernt. Vor Rückführen dieser "freigesetzten" TEXT_WORDs zum Aufrufprogramm werden Grundlinien für die TEXT_WORDs berechnet und konstituierende BOXes freigegeben.
- Beabsichtigt ist, daß die obere und untere TEXT_WORD- Grundlinie Oberlängen/Unterlängen "durchschneidet". Der Algorithmus zum Ermitteln solcher Grundlinien ermittelt eine durchschnittliche Mittellinie für die BOXes im TEXT_WORD auf der Grundlage der oberen und unteren x-Koordinate des BOX. Anschließend werden BOX-Unterseiten und -Oberseiten miteinander verglichen, um die x-Koordinaten zu ermitteln, die am nächsten zur Mittellinie sowie oberhalb und unterhalb von ihr liegen. Die minimale BOX-Unterseite unterhalb der Mitte ist die BOTTOM-Grundlinie, und die minimale BOX-Oberseite oberhalb der Mitte ist die TOP-Grundlinie.
- Das vorgenannte Verfahren funktioniert mit den meisten TEXT_WORDs gut, ermittelt aber nicht genaue Grundlinien für TEXT_WORDs mit nur Großbuchstaben, mit Kleinbuchstaben, die alle Oberlängen oder Unterlängen haben, oder mit Bindestrichen. Eine spätere statistische Verarbeitung von TEXT_LINEs überwindet diese Probleme.
- Der liner() kombiniert Stapel von TEXT_WORDs zu TEXT LINEs anhand von lokalen Angrenzkriterien in einem Verfahren, das zu dem vorstehend für den worder() beschriebenen direkt analog ist. Im folgenden werden die wichtigsten Unterschiede zwischen dem liner() und dem worder() beschrieben.
- Der Zeilenersteller verwendet zwei eindimensionale Matrixfelder von Zeigern auf TEXT_LINEs, die als GRIDs bezeichnet werden. Jeder "Schlitz" in einem GRID enthält einen Zeiger auf eine Liste von TEXT_LINEs, wobei das endnächste TEXT_WORD, das auf den Index des GRID fällt, der y-Koordinate des Seitenpuffers geteilt durch 64 entspricht. Ein GRID wird entsprechend dem linken Ende von TEXT_LINEs verwaltet und ein weiteres für das rechte Ende.
- Die Gitter des liner() sind direkt analog zu den Maschennetzen des worder() mit der Ausnahme, daß keine Sortierung nach der x-Koordinate benötigt ist. Grund dafür ist, daß TEXT_LINEs lange und schmale begrenzende Rechtecke haben und sich keine Geschwindigkeitsverbesserung aus einem x-weisen Sortieren dieser Strukturen ergeben würde.
- Die y-Angrenzkriterien des liner() nutzen TEXT_WORD- Grundlinien anstelle von begrenzenden Rechtecken wie beim worder().
- Dem liner() wird ein Zeiger auf einen TEXT_WORD-Kopf zugeführt, der eine verknüpfte Liste von TEXT_WORDs enthält, für die eine "Zeilenerstellung" erfolgen soll. Ist der Kopf- Zeiger Null, erhglt der liner() TEXT_WORDs durch Aufrufen des worder(). Somit kann der liner() verwendet werden, um TEXT _-WORDs erneut zu verarbeiten, für die zuvor eine "Zeilenerstellung" erfolgte. Der liner() setzt TEXT_LINEs nicht inkremental frei, sondern läuft solange, bis alle verfügbaren TEXT_WORDs verarbeitet sind.
- Die vom liner() erzeugten TEXT_LINEs werden zum Abschätzen der Seitenneigung verwendet, die sich aus einem schrägen Auflegen des Originaldokuments auf die Abtasterplatte ergibt.
- Der Neigungswert ist gleich dem Verhältnis der Summe aus der x-Verschiebung des ersten und letzten TEXT_WORD-Rechtecks aller TEXT_LINEs zur Summe der y-Verschiebungen des ersten und letzten TEXT WORD-Rechtecks aller TEXT_LINEs.
- Die Neigung ist festgelegt als x-Verschiebung je Anzahl von y-Bildpunkten (Anstieg über Strecke). Folglich zeigen kleine Neigungswerte ein großes Maß an Seitenschräge an. Bei Feststellung eines sehr großen Neigungswerts (kleine Neigung) wird die Neigung auf Null gesetzt (undefinierter Anstieg über Strecke), um zu kennzeichnen, daß keine nachfolgende Operation zur Schräglagenbeseitigung erforderlich ist.
- Dabei besteht die Seitenbeschreibung aus TEXT_LINEs und einer separaten Liste von BOXes, die durch die filter()-Funktion als Grafik markiert sind. Die BOXes werden einfach gedreht, während TEXT_LINEs von TEXT_WORDs befreit werden, um eine Liste aufzubauen. Anschließend werden die TEXT_WORDs gedreht, und TEXT_LINEs werden erneut aufgebaut, indem die TEXT_WORD-Liste zum liner() geführt wird. Da der liner() bei der Verarbeitung von Bildern mit hochgradiger Schräglage fehleranfällig ist, gewährleistet dieser Schritt, daß genaue TEXT_LINEs gewonnen werden.
- Grundlinien werden für TEXT_LINEs durch Korrelieren von TEXT_WORD-Grundlinien unter Verwendung des im folgenden beschriebenen Verfahrens konstruiert. Zunächst wird eine gewichtete Summe für beide Grundlinien aller TEXT_WORDs in der TEXT_LINE berechnet. Jede TEXT_WORD-Grundlinie wird anhand der Anzahl von BOXes gewichtet, die zum Konstruieren dieser Grundlinie verwendet werden (diese Anzahl wird während des BOX-Freisetzens festgehalten). Die Summen werden durch das Gesamtgewicht jeder Grundlinie dividiert, was das Mittel gewichteter TEXT_WORD-Grundlinien ergibt. Als nächstes wird das Quadrat der Standardabweichung (Streuung) von Wortgrundlinien von den beiden Mittelwerten ermittelt. Danach werden neue gemittelte Grundlinien berechnet, wobei nur Wortgrundlinien innerhalb einer Standardabweichung der alten gemittelten Grundlinien verwendet werden. Anschließend werden neue Quadrate der Standardabweichung von Wortgrundlinien von den neuen Mittelwerten ermittelt. Die Summe der neuen Standardabweichung wird als Streuung zugrundegelegt. Die neuen gemittelten Grundlinien werden als die TEXT_LINE-Grundlinien mit der Streuung als Korrelationsmaß verwendet.
- Resultierende TEXT_LINE-Grundlinien, die eine schlechte TEXT_WORD-Grundlinienkorrelation oder eine schlechte Korrelation mit dem begrenzenden TEXT_LINE-Rechteck aufweisen, werden gekennzeichnet. TEXT_LINEs mit mehr als einem konstituierenden TEXT_WORD, die die vorgenannten Probleme aufweisen, rühren gewöhnlich aus sich vertikal berührenden Zeichen auf der gedruckten Originalseite her.
- Die geglättete Ableitung eines Histogramms von TEXT _-WORD-Höhen wird zum Wiederherstellen von Aufteilungspunkten (y-Koordinaten) für solche fehlerverdächtigen TEXT_LINEs verwendet. Da der lokale worder() und liner() eine zu weite Verbreitung von sich vertikal berührenden Zeichen durch Fragmentieren von TEXT_WORDs und TEXT_LINEs verhindern, werden alle Nachbarn der fehlerhaften TEXT_LINE mit vollständigem y-Einschluß und gewisser x-Überlappung analysiert, um eine gute Probe zu erhalten. Das Histogramm erfaßt obere und untere TEXT_WORD-Rechteckkoordinaten, beginnend an der Oberseite der fehlerhaften TEXT_LINE und mit einer Auflösung von INTERVAL- Bildpunkten zwecks Filterung. Zeilengrenzen werden als lokale Maxima des Histogramms detektiert, wobei eine durch Faltung ermittelte geglättete erste Ableitung verwendet wird. Die Maxima zeigen sich als positive bis negative Nulldurchgänge der Ableitung, die mit einem Schwellwert verglichen werden, um Aufteilungspunkte zu bestimmen.
- Konstituierende TEXT_WORDs mit schlechter Korrelation mit den TEXT_LINE-Grundlinien werden in mehrere neue TEXT _-WORDs unter Verwendung der so ermittelten Aufteilungspunkte aufgeteilt. Die TEXT_WORDs werden zurück zum liner() geführt, um korrekte TEXT_LINEs zu rekonstruieren.
- Die meisten Linienmuster- und Halbtonbilder enthalten zumeist verbundene Linien, die große BOXes beim anfänglichen Rahmenerstellen erzeugen. Diese werden auf alleiniger Grundlage der Größe in der anfänglichen filter()-Funktion (vorstehend beschrieben) gefiltert. Grafische BOXes (vier Linierungen) werden in diesem Stadium von anderen Grafiken anhand eines hohes Flächen-Dichte-Verhältnisses unterschieden und als Linierung gekennzeichnet. Die Detektion einzelner Linierungen erfolgt erst nach der Neigungsbeseitigung.
- Nach der Neigungsbeseitigung der Grafik- und Linierungsrahmen werden sich überlappende oder verschachtelte Grafik- BOXes kombiniert. Dadurch werden nicht verbundene Liniensegmente in Linienmusterbildern beseitigt (die ansonsten als Linierungen gekennzeichnet würden) und große getrennte Grafikflächen verbunden. Danach werden TEXT_LINEs, die durch Grafik-BOXes eingeschlossen sind (die gewöhnlich mehrere nicht verbundene Bits von Grafikbildern sind), absorbiert. Im Anschluß werden Linierungen in eine separate Liste von BOXes ausgesondert, indem die BOXes auf Extrema im Seitenverhältnis geprüft werden. BOXes mit großen begrenzenden Rechtecken und geringer Dichte werden als mögliche verbundene Linierungen ausgesondert. Solche BOXes werden in konstituierende Linierungen zerlegt oder auf der Grundlage einer Histogrammverarbeitung des ursprünglichen Punktrasters an den vier Grenzen des begrenzenden Rechtecks des BOX verworfen.
- Die nunmehr gut korrelierten TEXT_LINE-Grundlinien werden auf die konstituierenden TEXT_WORDs angewendet. Danach werden TEXT_WORDs von TEXT_LINEs befreit, und die TEXT_LINEs werden verworfen. Anschließend werden TEXT_LINEs neu aufgebaut und COLUMNs ermittelt, wobei eine TEXT_WORD-Überlappung angrenzender Zeilen und nicht ein eingestellter TEXT_ WORD-Abstand als Signal für die Aufnahme von Wörtern in TEXT_LINEs verwendet wird. Dieser "Wortüberlappungs-Algorithmus" ist gegenüber Text mit Proportionalabständen unempfindlich.
- Die Verfahren, mit denen COLUMN-Strukturen begonnen, vergrößert und vereinigt werden, ähneln mit den nachfolgenden Ausnahmen denen, die bereits für den Aufbau von TEXT_WORDs und TEXT_LINEs beschrieben wurden. Zur Operationsbeschleunigung sind keine MESH- oder GRID-Strukturen erforderlich, da auf einer Seite relativ wenige COLUMNs vorhanden und da ankommende TEXT WORDs nunmehr nach der y-Oberseitenkoordinate der begrenzenden Rechtecke geordnet sind (die COLUMNs vergrößern sich geordnet von oben nach unten). Für jedes ankommende TEXT_WORD erfolgt eine Suche, um zu bestimmen, ob es eine CO- LUMN gibt, die das TEXT WORD überlappt. Bei Nichtfeststellung einer solchen COLUMN wird eine neue begonnen. Bei Feststellung zweier COLUMNs werden diese vereinigt.
- TEXT_LINEs werden "spaltenintern" aufgebaut, d. h., ein TEXT_WORD wird zunächst in eine COLUMN aufgenommen, und anschließend erfolgt die TEXT_LINE-Suchoperation unter Verwendung der y-weise sortierten Liste von TEXT_LINEs nur in dieser COLUMN. Die Operationen "new" (neu), "add" (zufügen) und "merge" (vereinigen) werden zur Verarbeitung des TEXT_WORD in eine TEXT_LINE gemäß der vorstehenden Beschreibung durchgeführt.
- Bei ihrem Aufbau von der Oberkante der Seite nach unten werden die COLUMNs abgeschlossen und neue COLUMNs begonnen, wenn große Veränderungen im Zeichensatz (TEXT_ LINE-Grundlinienhöhe) oder im TEXT_LINE-Zwischenabstand angetroffen werden. Dadurch werden die Überschriften und Spaltenbrüche eliminiert, die in komplexen Seitenformaten von Zeitschriften und Zeitungen zu finden sind.
- Da Überschriften und Titelzeilen wenige Zeilen haben, erzeugt das "Brechen" von COLUMNs bei Formatänderungen (Zeichensatz, Abstand) fragmentierte COLUMNs und TEXT_LINEs infolge einer unzureichenden x-Überlappung von y-weise aufeinanderfolgenden TEXT_WORDs in der COLUMN. Die durch unzureichende Überlappung erzeugten COLUMN-Fragmente werden akkumuliert, und COLUMNs mit schlechter Korrelation der konstituierenden TEXT_LINE-Grundlinien werden ausgefiltert.
- Zuerst werden verschachtelte Spalten vereinigt. Verschachtelte Spalten treten in kurzen Absätzen infolge des gewaltsamen Brechens von COLUMNs auf Abstandsgrundlage auf. Der Algorithmus weist normalerweise das Aufgehen der großen COLUMN in der verschachtelten COLUMN auf, da ein Aufgehen zum Ende der Liste hin zu einem Verfahren in einem Durchgang führt. Eine y-weise Sortierreihenfolge wird angenommen.
- Anschließend werden COLUMNs mit wenigen Zeilen (gewöhnlich ein Kopf) markiert. Solche COLUMNs unterliegen einer Fragmentierung durch den Überlappungs-Zeilenersteller, d. h., bei Feststellung einer benachbarten engen COLUMN mit wenigen Zeilen und guter Grundlinienkorrelation werden die COLUMNs vereinigt.
- Abschließend wird die COLUMN-Liste gefiltert. Zu verworfenen COLUMNs gehören sehr kleine COLUMNs, COLUMNs mit mehreren Zeilen und großer Streuung der Grundlinienhöhe oder mit einer sehr kleinen mittleren Grundlinienhöhe sowie COLUMNs mit einer einzigen Zeile, bei denen die Grundlinien außermittig oder zu eng liegen.
- Bei komplexen Dokumentenformaten ordnet der zoner() COLUMNs sequentiell in der Lesereihenfolge. Die bevorzugte Ausführungsform des zoner() verwendet nur Überschriften zum sequentiellen Ordnen von COLUMNs. Alternativ kann die Verwendung von Linierungen und Regeln zur Tabellenunterscheidung implementiert sein.
- Das Grundverfahren zum sequentiellen Ordnen von COLUMNs durch den zoner() erfolgt in einem Verfahren mit mehreren Durchgängen gemaß der nachfolgenden Beschreibung.
- COLUMNs, die Textüberschriften sind, werden gekennzeichnet. Solche Textüberschriften wurden durch den Zeichensatz- Bruchmechanismus der colunm()-Funktion in separate COLUMNs herausgebrochen. Das Kennzeichnungsverfahren konstruiert ein Histogramm des TEXT_LINE-Zeichensatzes (Grundlinienhöhe) als Funktion der Anzahl von TEXT_LINEs über allen COLUMNs. Das globale Maximum (der gebräuchlichste Zeichensatz) für die Seite wird ermittelt und zur Bestimmung eines Zeichensatz- Schwellwerts zur Unterscheidung von Überschriften verwendet. Überschrift-COLUMNs werden gekennzeichnet, wenn der COLUMN- Zeichensatz den Schwellwert übersteigt.
- Als nächstes werden "Kolummentitel" gekennzeichnet. Solche COLUMNs sind zuvor gekennzeichnete Überschrift-COLUMNs, die mindestens zwei Text-COLUMNs überlappen, die selbst nicht überlappend sind (d. h., jede Überschrift, die sich über mehrere COLUMNs unmittelbar darüber oder darunter erstreckt).
- Eine neue COLUMN-Liste wird konstruiert, die nur Kolumnentitel-COLUMNs enthält, wenn solche COLUMNs gekennzeichnet wurden.
- Danach werden die COLUMNs zwischen die (gegebenenfalls vorhandenen) Kolumnentitel-COLUMNs in der neuen COLUMN-List "stapelsortiert". Die "Stapelsortierung" sucht nach der ersten x-weise überlappenden COLUMN oberhalb der in die neue Liste sortierten COLUMN und fügt die nachfolgende COLUMN (y- weise Reihenfolge) ein, wobei bis zur nächsten festgestellten Kolumnentitel-COLUMN gesucht wird. Wird keine überlappende COLUMN festgestellt, wird die gerade sortierte COLUMN in x- weiser Reihenfolge und vor der nächsten Kolumnentitel-COLUMN eingefügt. Dadurch werden x-weise geordnete vertikale (y- weise geordnete) Stapel von COLUMNs (mit Einzelspalten-Überschriften) zwischen allen Kolumnentiteln gebildet.
- Eine für den Betrieb der DDM wesentliche Neuerung ist die Verwendung der Seitenbeschreibung, die über eine Formatanalyse des Dokumentbilds gewonnen wird, für die automatische Darstellung von Dokumenten für den Benutzer mit Sehstörungen. Es werden die wichtigsten Merkmale der Dokumentendarstellung beschrieben, gefolgt von einer Beschreibung der neuartigen Aspekte des Softwareteilsystems zur Anzeigeverwaltung, das diese realisiert.
- Ein sehgeschädigter Benutzer, der die DDM mit einer zum Lesen geeigneten Vergrößerung betreibt, wird jeweils nur einen sehr kleinen Abschnitt des abgetasteten Dokuments sehen können. Damit ist der Lesekontext eingeschränkt, und es können Unklarheiten über die Position des Benutzers in einem Dokument zu einer bestimmten Zeit auftreten. Dies wird allgemein als "Seitennavigationsproblem" bei Hilfsmitteln für eingeschränkt Sehende bezeichnet. Daher ist es wünschenswert, dem Benutzer mit Sehstörungen eine Seitennavigationshilfe zu offerieren. Die Benutzersteuervorrichtung, z. B. als Trackball oder Joystick, kann normalerweise einen Knopf aufweisen, der für eine solche Navigationshilfe reserviert ist, die als die Betriebsart Seitenübersicht bezeichnet wird.
- In der Übersichtsbetriebsart wird die Seitenbildvergrößerung so eingestellt, daß die kürzere Seitenbildachse den Bildschirm gerade füllt. Dies wird als automatische Seitengrößeneinstellung bezeichnet. Das Seitenbild wird dadurch in der Vergrößerung so verkleinert, daß einzelne Wörter vom sehgeschädigten Benutzer nicht mehr gelesen, wohl aber größere Seitenmerkmale, z. B. Spalten oder Abbildungen, ausgemacht werden können. Zusätzlich erscheint auf dem Bildschirm ein großer Block-Cursor. Der Benutzer kann diesen Cursor mit der steuervorrichtung über das Seitenbild bewegen.
- Zwei Cursorbetriebsarten können realisiert werden. Zunächst kann ein Cursor zur inversen Bildschirmdarstellung (zum Durchschauen) vorgesehen sein, der seine Größe gemäß der Vergrößerungssteuerung ändert. In der Betriebsart zur inversen Bildschirmdarstellung füllt der Inhalt des Cursors den Bildschirm, wenn der Benutzer den reservierten Knopf für die Betriebsart Ansichtsdarstellung (Lesebetriebsart) an der Steuervorrichtung drückt (und der Cursor verschwindet).
- Alternativ zeigt ein Cursor mit starkem "Lupen"-Effekt ein vergrößertes Bild der vom Cursor bedeckten Seitenf läche, wobei die Bildvergrößerung im Cursor durch die Vergrößerungssteuerung gesteuert wird.
- Das Bild in der Mitte des Lupen-Cursors wird beim Übergang in die Betriebsart Ansichtsdarstellung auf dem Bildschirm zentriert, wobei die Vergrößerung des Bildschirms in der Ansichtsbetriebsart auf die Vergrößerung eingestellt ist, die innerhalb des Cursors vor dem Umschalten sichtbar war.
- In allen Fällen deckt eine Bewegung des Übersicht-Cursors zur Bildschirmkante Dokumentenabschnitte auf, die zu diesem Zeitpunkt u. U. nicht auf dem Bildschirm sichtbar sind. Außerdem wird beim Übergang von der Ansichts- zur Übersichtsbetriebsart der Cursor auf dem Übersichtsbildschirm automatisch so positioniert, daß er genau die Seitenfläche bedeckt, die zuvor auf der vergrößerten Ansichtsanzeige dargestellt war. Für Benutzer mit schwerem Sehverlust liefert die relative Position des Cursors dabei wichtige Hinweise für die Seitennavigation, auch wenn einzelne Seitenmerkmale nicht klar ausgemacht werden können.
- Somit erfordert die Betriebsart Übersicht die Implementierung bestimmter Softwarefunktionen, die nachfolgend näher beschrieben sind: ein "CURSOR PAIR", das die Position des Benutzers sowohl auf dem Bildschirm ("DISPLAY CURSOR") als auch auf der Seite ("PAGE CURSOR") darstellt, "EXPLICIT" (sichtbare) und "IMPLICIT" (unsichtbare, Position durch System verwaltet) DISPLAY CURSORS, verschiedene Cursor-Anzeigeeffekte für EXPLICIT CURSORS, automatische Größeneinstellung des Seitenbilds sowie glattes Verschieben und Rollen des Seitenbilds mit versteckter dynamischer Aktualisierung des Anzeigepuffers.
- Die Implementierung dieser Softwarefunktionen ist einzigartig und infolge der Anzeigeumgebung der DDM schwierig: ein Ringanzeigepuffer mit dynamischer Seitenskalierung aus dem Seitenpuffer zum Anzeigepuffer anhand von Skalierungsverhältnissen, die keine Ganzzahlen sein können. Daher wird die Implementierung in den nachfolgenden Abschnitten beschrieben.
- In der Betriebsart manuelle Ansichtsdarstellung handhabt der Benutzer die Benutzersteuervorrichtung, um sich glatt über das vergrößerte Seitenbild mit dem gewünschten Vergrößerungsgrad zu bewegen. Der Vergrößerungsgrad kann jederzeit mit der Vergrößerungssteuerung geändert werden. Die manuelle Betriebsart ist am hilfreichsten zum "Überfliegen" oder "Durchsehen" des Dokumenteninhalts oder zum Betrachten von Seitenflächen, für die die automatischen Lesemerkmale nicht zutreffen (d. h., Grafikflächen, Tabellen, Karten usw.). Ferner kann die manuelle Betriebsart als zusätzliche Seitennavigationshilfe eingesetzt werden.
- Der Benutzer kann mit dem Menü seine bevorzugten automatischen Ansichtsbetriebsarten auswählen und als Standardwerte sichern. Anschließend kann der Benutzer den Knopf Ansicht auf der Benutzersteuerung mehrmals drücken, um sich von der manueilen Betriebsart durch die ausgewählten automatischen Betriebsarten zu bewegen. Dadurch kann der Benutzer eine gewünschte Leseposition im Dokument finden und dann die zu wählende automatische Ansichtsbetriebsart genau an dem interessierenden Punkt auf der Seite aufrufen.
- Daß diese Merkmale für die DDM vorgesehen sind, bringt wiederum die Lösung schwieriger Probleme für eine genaue Umwandlung zwischen Seiten- und Anzeigekoordinaten über Skalierungsverhältnisse mit, die u. U. keine ganzzahligen Werte sind. Ferner muß ein Problem der Bildregisterhaltigkeit (als "Bildheftung" bezeichnet) gelöst werden. Die Lösung dieser Probleme wird durch die nachfolgend beschriebene "Gitterung" von Koordinaten erreicht.
- Ein vereinfachtes Lesen abgetasteter Dokumente ergibt sich in der Betriebsart automatische Einzeilen-Ansichtsdarstellung. In dieser Betriebsart wird das Layout des abgetasteten Dokuments in eine einzelne kontinuierliche Textzeile umgewandelt. Eine in der automatischen Ansichtsbetriebsart dargestellte Seite erscheint tatsächlich kontinuierlich: aufeinanderfolgende Textspalten werden richtig nacheinander geordnet, Absatzeinzüge werden entfernt, Grafikbilder werden übersprungen usw. Durch diese Betriebsart braucht der Benutzer nicht mehr die Zeilen zu verfolgen, was eine Hauptursache. für die Ablenkung und Ermüdung des Benutzers bei herkömmlichen CCTV-Systemen ist. Der Benutzer bewegt mit der Steuervorrichtung die Textzeile einfach über den Bildschirm und braucht am Ende der Textzeile nicht zur linken Kante der Textspalte "zurückzukehren".
- Bei aktivierter Betriebsart "SPEED" der DDM bewegt sich die einzelne Textzeile automatisch sowie kontinuierlich und glatt mit einer Geschwindigkeit über den Bildschirm, die mit der Steuervorrichtung leicht eingestellt und geändert wird. Dadurch kann freihändig gelesen werden.
- Zur Betriebsart Einzeilendarstellung gehört eine automatische "Blenden"-Fähigkeit, die alle Abschnitte des Seitenbilds mit Ausnahme der Textzeilenabschnitte abdeckt, die den Bildschirm aktuell von einem Ende zum anderen füllen. Dadurch wird unerwünschtes Material, z. B. benachbarte Zeilen, Grafiklinierungen und störende Flecke, der Betrachtung entzogen. Die Realisierung dieser Betriebsart erfordert eine Neuabbildung des Seitenbilds auf dem Bildschirm anhand der vom automatischen Formatanalysator ermittelten Seitenbeschreibung Die Abbildung erfolgt dynamisch und kontinuierlich, während sich der Benutzer durch das Dokument bewegt. Schwierige Realisierungsprobleme müssen in den Bereichen von Koordinatenübersetzung und Skalierung gelöst werden, um angesichts nicht ganzzahliger Skalierungsverhältnisse und des Versatzes des Ringanzeigepuffers Bildflächen mit einer Genauigkeit von einem Bildpunkt auf dem Bildschirm zu plazieren. Zur Implementierung der Abbildung werden Seitenkoordinaten-ZONEs gemäß der nachfolgenden Beschreibung verwendet.
- Durch die Implementierung automatischer Blenden müssen Polygonflächen des Seitenbilds abgedeckt werden, und zwar stets unabhängig vom vorherigen Zustand der Anzeige. Eine genaue Initialisierung der Anzeige in dieser Betriebsart ist allgemein ein komplexes Problem. Erfolgt beispielsweise der Eintritt in die kontinuierliche Zeilenbetriebsart und ist das Seitenbild in der Nähe eines Zeilenendes positioniert, müssen danach mehrere Textzeilen anfänglich an den Enden genau "zusammengeheftet" dargestellt werden, um eine Einzelzeile zu bilden, wobei ausgeschlossene Flächen korrekt abgedeckt sind. Diesen Problemen widmet sich die Gestaltung des Anzeigeteilsystems FILLER code, so daß artefaktfreie und genaue registerhaltige Anzeigen erzeugt werden.
- Das Lesen von Dokumenten im Spaltenformat bei mäßigen Vergrößerungsgraden und das Überfliegen von Dokumenten wie Wörterbüchern oder Indizes wird durch die Betriebsart kontinuierliches Einspaltenrollen erleichtert. In dieser Betriebsart werden Dokumente als einzelne kontinuierliche Spalte dargestellt. Auf beiden Seiten der kontinuierlichen Spalte erscheinende Dokumentbilder werden durch vertikale Blenden verdeckt.
- Ein automatischer Übergang zur Betriebsart kontinuierliche Einzelzeile erfolgt, wenn der Benutzer eine Spaltenkante über die Bildschirmmitte hinaus verschiebt. Dadurch kann der Benutzer z. B. durch eine Wörterbuchseite rollen, bis er den ihn interessierenden Eintrag findet, und dann das automatische Verschieben aufrufen, um den Eintrag im Detail zu lesen. Daß dieses Merkmal vorgesehen ist, erfordert wiederum eine spezifische Abbildung von Bereichen des Dokumentbilds zum Anzeigebildschirm und die Implementierung von Polygonblenden.
- Viele weitere Lesebetriebsarten lassen sich mit den Seitenbeschreibungs- und Abbildungsfunktionen der DDM aufbauen. Diese Betriebsarten sind über Menüs auswählbar und auf verschiedene Arten der Sehbehinderung zugeschnitten. Daß diese Betriebsarten vorgesehen sind, beweist die Notwendigkeit einer flexiblen Abbildungsmöglichkeit für Bilder, die durch das Anzeigeteilsystem realisiert ist.
- Die Menübetriebsart der DDM bietet dem Benutzer Einrichtungen zum Auswählen spezifischer Funktionen, Merkmale und Einstellungen. Der Menübetrieb erfordert einen Satz von Effekten, z. B. Symbolcursors und Bildüberlagerungen, die in der Anzeigeumgebung der DDM schwierig zu verwalten sind.
- Durch das Anzeigeteilsystem der DDM können neue Merkmale in Quellpunktrastern gezeichnet werden (z. B. Menübilder), wobei die selektive Aktualisierung des Anzeigebildschirms anhand des Quellpunktrasters nur für den modifizierten Bereich erfolgt. Um dieses Ergebnis zu erreichen, verfolgt die DDM-Software die Position von Abschnitten des Quellbilds im transienten Ringanzeigepuffer mit ausreichender Genauigkeit, um die Bildaktualisierung (Überlagerungseffekt) ohne Versetzung zu erzeugen. Diese Möglichkeit ist durch die Gitterungs-, Abschneide- und Cursorverwaltungsfunktionen des Anzeigeteilsystems vorgesehen.
- Das Softwareteilsystem der DDM-Anzeigeverwaltung ist eine einzigartige Lösung für das Problem der Skalierung von Koordinaten zwischen einem Quellbild-Punktrasterpuffer und einem Ringanzeigepuffer mit nicht ganzzahligen Skalierungsverhältnissen, ohne Anhäufung von Koordinatenfehlern und bei gleichzeitiger dynamischer Neuabbildung der Seitengeometrie, um kontinuierliche Zeilen- und kontinuierliche Spalteneffekte zu erhalten.
- Wichtige Konzepte in der Realisierung der Anzeigeverwaltung sind: Gitterung (genaue Koordinatenumwandlung mittels Abbrechen), Abschneiden (Erreichen einer genauen Registerhaltigkeit oder "Aneinanderheften" von Schablonenzoomoperationen unter Erreichen einer Einzelbildpunkt-Kantenpositionierung, Zonenabbilden (Beibehalten einer Darstellung des Dokuments wie bei der Präsentation für den Benutzer im Hinblick auf die Versätze von Zonen im Punktraster des Quellseitenbilds zum Bildschirmursprung), Rollen (Ringpufferverwaltung), Cursor- Paar (Anzeige-Cursor und Seiten-Cursor stellen den gleichen Punkt im Bildschirmraum und im Seitenraum dar) sowie Cursors vom Typ explizit und implizit.
- Fig. 20 zeigt die hierarchische Beziehung der Softwaremodule, die das Softwareteilsystem Anzeigeverwaltung bilden. Die Softwaregestaltung verwendet Schichtungs- und Kapselungstechniken zur Verringerung der gegenseitigen Abhängigkeiten zwischen Modulen durch Abstrahieren (Verdecken) aufeinanderfolgender Detailebenen. Die nachfolgende Beschreibung ist auf Fig. 20 abgestimmt und verläuft von oben nach unten, um die Softwaregestaltung zu beschreiben.
- Die äußerste Schicht des Anzeigeteilsystems ist im DISPSYS-Codemodul 150 implementiert. Diese Schicht bildet die Schnittstelle zwischen dem Anzeigeteilsystem und dem "Benutzerschnittstellencode" über einen Satz von Funktionsaufrufen und Datenstrukturen. Der "Benutzerschnittstellencode" ist in "Betriebsarten" aufgeteilt, z. B. die Übersichts-, Ansichtsund Menübetriebsart. Die Betriebsarten konfigurieren das Anzeigesystem bedarfsgemäß durch "Öffnen" des Anzeigesystems mit einem spezifischen Satz von Parametern und sein "Schließen", wenn ein Übergang zu einer neuen Betriebsart erfolgt (z. B. nachdem ein Benutzer einen Knopf drückt).
- Die Funktionen OpenDisplay() und CloseDisplay() stellen die Mittel für Betriebsarten zum Erstellen einer neuen Anzeigeumgebung und ihrer Beendigung bereit. Die DISPLAY- Datenstruktur wird jeder dieser Funktionen (zugeführt: beim "Öffnen" konfiguriert die Struktur die Anzeige, beim "Schließen" wird die Struktur aktualisiert, um den Anzeigezustand zu sichern, so daß der Anzeigebildschirm später genauso wie beim "Schließen" wiederhergestellt werden kann.
- Die DISPLAY-Struktur enthält Zeiger auf eine Cursor- Stelle (CUR_LOC) und Cursor-Attributstrukturen (CUR_ATR). CUR_LOC enthält die Koordinate eines Anzeige-Cursors (DISP _-CUR) und eines Seiten-Cursors (PAGE_CUR) sowie einen Zeiger auf eine PAGE-Struktur. Ihrerseits enthält die PAGE-Struktur einen Zeiger auf ein Quellbild-Punktraster (src_bm), einen Zeiger auf eine Seitenbeschreibung (Liste der PAGE DESCRIPTOR-Strukturen), die durch den Formatanalysator aufgebaut wird, und Zeiger zum Verknüpfen dieser PAGE mit anderen gespeicherten PAGEs, die das BOOK bilden (einen Kopf für die Liste von PAGE-Strukturen).
- Die DISP_CUR-Koordinate befindet sich im "Anzeigeraum": sie legt einen Punkt auf dem Anzeigebildschirm fest, an dem (0, 0) die linke obere Ecke des Bildschirms ist, und die maximale Koordinate wird durch die Bildschirmauflösung des verwendeten Anzeigemonitors bestimmt. Die Bildschirmauflösung wird in das Feld screen_size der DISPLAY-Struktur geschrieben.
- Die PAGE_CUR-Koordinate befindet sich im "Seitenraum". Sie legt einen Punkt auf dem Seitenbild-Punktraster (src_bm- Feld in PAGE) fest. Da ein variables Skalierungsverhältnis (ZOOM) beim Kopieren von Seitenbildern zum Bildschirm angewendet wird, stehen die beiden Cursorkoordinaten durch dieses Skalierungsverhältnis in Beziehung zueinander. Da außerdem das Seitenbild auf dem Anzeigebildschirm mit einer anderen Geometrie als auf der Originalseite rekonstruiert wird, gilt auch eine Koordinatenübersetzung zwischen den beiden Cursor- "Räumen". Diese Übersetzung ändert sich je nach verwendeter Darstellungsbetriebsart: kontinuierliche Textzeilen, kontinuierliche Textspalten usw.
- Der DISP_CUR und PAGE_CUR enthalten zusammen alle benötigten Positionsinformationen, um eine Lesestelle in einem Satz von Dokumentbildern (PAGEs) mit einer Stelle auf dem Anzeigebildschirm in Beziehung zu setzen. Die beiden Cursors werden gemeinsam als "Cursor-Paar" bezeichnet und sind von zentraler Bedeutung für die externe Steuerung des Anzeigeteilsystems. Das Cursor-Paar bildet einen Punkt auf dem Anzeigebildschirm zum Seitenbild ab. Da alle Operationen im Anzeigeteilsystems im Hinblick auf das Cursor-Paar festgelegt sind, kann das Anzeigeteilsystem als "cursorgesteuert" bezeichnet werden.
- Die Gestaltung des Anzeigeteilsystems sieht eine genaue und folgerichtige Skalierung und Übersetzung von Cursor-Koordinaten zwischen den beiden Cursor-"Räumen" vor. Dieses Verfahren wird im folgenden näher beschrieben.
- Die CUR_ATR-Struktur enthält Informationen über den Typ des Anzeige-Cursors (DISP_CUR). Ist der Cursor vom Typ IMPLICIT, kann der Benutzer den Anzeige-Cursor nicht sehen. Anstelle dessen ist der Anzeige-Cursor lediglich ein Bezugspunkt, der die Bildschirmmitte (CENTER_REF) oder die linke obere Bildschirmecke (CORNER_REF) sein kann. Anzeige-Cursors vom Typ EXPLICIT sind für den Benutzer sichtbar und können mit Exklusiv-ODER-Block-, Lupen- oder Symboleffekten erzeugt werden. Die Größe des EXPLICIT-Anzeige-Cursor sowie das Musterpunktraster (beim Typ Symbol) werden ebenfalls über Felder in der CUR_ATR-Struktur eingestellt.
- Ferner enthält die DISPLAY-Struktur Zeiger auf zwei ZOOM-Strukturen, die das Skalierungsverhältnis (Vergrößerung/Verkleinerung) für die Seite und für den EXPLICIT-Anzeige- Cursor enthalten, sofern einer aktiviert ist. Der Anzeige- Cursor ZOOM ist speziell zur Verwendung mit "Lupen"-Effekt- Cursors vorgesehen.
- Zum Modifizieren der Größe von angezeigtern Text schließt eine Betriebsartenfunktion die Anzeige, modifiziert den Zeiger page_zoom und öffnet die Anzeige wieder.
- Außerdem weist die DISPLAY-Struktur einen Zeiger auf eine "Setzer"-Funktion auf. Die Setzerfunktionen kapseln die betriebsartenabhängigen Aspekte der Seitendarstellung ein. Hierbei wird das Wort "setzen" wie beim Schriftsetzen (Drukken) verwendet. Durch Festlegen einer speziellen Setzerfunktion in der DISPLAY-Struktur bei Opendisplay() stellt die Aufrufsbetriebsart eine Bildschirmaktualisierung als Einzelzeile, Einzelspalte, umlaufender rechter und linker Rand usw. ein. Somit erfolgt durch die Setzerfunktion (im Grunde) ein neues Schriftsetzen der Seite auf der Grundlage der Seitenbeschreibung (einer zerlegten Seite) und für einen speziellen Satz von Effekten.
- Die Funktion MoveCursor() ist die Einrichtung, durch die Benutzerbetriebsarten alle Bewegungseffekte auf dem Anzeigebildschirm erzeugen. MoveCursor() akzeptiert ein "Delta"-Paar (x, y) als Darstellung der vorzeichenbehafteten Verschiebung für die gewünschte Anzeige-Cursorbewegung. Berührt der Anzeige-Cursor die Kante des Bildschirms oder ist der Anzeige- Cursor vom Typ IMPLICIT, wird die gesamte Seitenanzeige glatt verschoben oder gerollt. Bei Cursors vom Typ EXPLICIT, bei denen der Cursor nicht die Bildschirmkante berührt, bewegt sich nur der sichtbare Cursor auf dem Bildschirm.
- Die Benutzerbetriebsart kann den Quell-Cursor nicht direkt bewegen. Jede Bewegung des Quell-Cursors ist Ergebnis einer Bewegung des Anzeige-Cursors. Der Quell-Cursor kann nicht linear zu einer Anzeige-Cursorbewegung bewegt werden, und zwar infolge der Neuabbildung von Seitenmerkmalen gemäß der Seitenbeschreibung und der Setzerfunktion, die im Aufruf OpenDisplay() verwendet wird.
- Die Funktion GetCursor() akzeptiert einen Zeiger auf eine CUR_LOC-Struktur und führt einen aktualisierten Seiten- Cursor, Anzeige-Cursor und Seitenzeiger zurück. Der Seiten- Cursor wird als Koordinate (-1, -1) zurückgeführt, wenn der Anzeige-Cursor nicht über einem Abschnitt des tatsächlichen Seitenbilds positioniert ist. Dies ist kein Fehler, zeigt aber, daß die Cursorkoordinatentransformation an diesem Punkt im Anzeigeraum nicht definiert ist. Der Zeiger auf eine Seite ist eingeführt, um den Aufbau einer Mehrseiten-Lesebetriebsart zu ermöglichen. Die vorgenannte BOOK-Struktur kann die Bilder mehrerer Seiten mit begleitenden Seitenbeschreibungen enthalten.
- Seitenbilder können in komprimiertem Format (CCITT Gruppe 3) gespeichert und bei Bedarf dekomprimiert werden, während der Benutzer das zuvor abgetastete Mehrseitendokument durchliest. Somit kann der Seitenzeiger durch die Setzerfunktion beim Lesen geändert werden, und die Cursorinformationen spiegeln dies richtig wider.
- GetCursor() ist die Einrichtung, durch die Betriebsarten den Anzeige-Cursor als Zeiger auf ein Seitenbild verwenden können. Dies ist für die Menübetriebsart wesentlich, in der der Benutzer den sichtbaren Cursor über dem Menü-"Seiten"- Bild positioniert, um Steuerpunkte auszuwählen. Ferner wird GetCursor() durch CloseDisplay aufgerufen, um die CUR_ LOC- Informationen in der zugeführten DISPLAY-Struktur richtig zu aktualisieren.
- Die Funktion ModifyCursor() dient zum dynamischen Ändern von Cursortyp, -größe oder -symbol, ohne die Anzeige zu schließen. Beispielsweise kann der Anzeige-Cursor durch Ändem eines Typs EXPLICIT in einen Typ IMPLICIT verdeckt werden.
- Durch die Funktion UpdateDisplay() können grafische Überlagerungseffekte im Ringanzeigepuffer erzeugt werden. Überlagerungsanzeigen sind gewöhnliche Grafikfunktionen, die z. B. bei der Erzeugung mehrerer Anzeige-"Fenster" auf einer Computerkonsole verwendet werden. Die Anzeigearchitektur der DDM erfordert eine einzigartige Lösung für die Überlagerungs verwaltung, die nachfolgend beschrieben ist.
- Alle Überlagerungseffekte werden durch Zeichnen oder Kopieren von Bildern auf ein Quellpunktraster und nicht direkt zum Punktraster des Anzeigepuffers erzeugt. Anschließend wird der Anzeigepuffer durch einen Aufruf von UpdateDisplay() aktualisiert, die als Parameter die Koordinaten einer Rechteckfläche auf dem Quellpunktraster zur Aktualisierung zum Bildschirm empfängt. UpdateDisplay() führt die richtige Skalierung und Übersetzung von Koordinaten aus dem Quell- zum Anzeigeraum durch, wozu bei Bedarf alle geometrischen Mehrfachtransformationen gehören. UpdateDisplay() gewährleistet, daß der Ringpuffer richtig aktualisiert wird. Einzelheiten dieses Verfahrens sind im folgenden beschrieben.
- Das Modul SETZOOM 152 besteht aus der Funktion SetZoom() und kapselt alle untergeordneten Funktionen ein, die zum Aufbau ein- und zweidimensionaler Schablonen für die vorstehend beschriebenen Skalierungsfunktionen auf Schablonengrundlage verwendet werden.
- Jeder Aufruf von SetZoom() mit einem Zeiger auf eine ZOOM-Struktur (Verhältnis) baut eine ZOOMSETTING-Struktur auf, die enthält: eine Kopie des ZOOM-Verhältnisses, einen Zeiger auf die Schablonentabelle für die eindimensionale Verkleinerung oder Vergrößerung zum nächsten Nachbarn oder die zweidimensionale Schablonenvergrößerung sowie andere Steuerinformationen, die von den Verkleinerungs-/Vergrößerungsfunktionen selbst benötigt werden.
- SETZOOM-Funktionen werden nur verwendet, um Tabellen und Steuerinformationen aufzubauen. Die tatsächlichen Zoomroutinen sind anderswo eingekapselt und werden der ZOOMSETTING- Struktur zur Steuerung ihres Betriebs zugeführt. Die spezifischen Algorithmen zum Tabellenaufbau wurden vorstehend näher diskutiert.
- Das Modul MOVER 154 implementiert alle auf dem Bildschirm sichtbaren Bewegungseffekte, zu denen Bewegungen des Cursors vom Typ EXPLICIT und Seitenbewegungen (Verschieben und Rollen) gehören. Dazu steuert das MOVER-Modul 154 die geometrische Transformation von Seitenbildern zu Bildschirmanzeigen für verschiedene Lesebetriebsarten, führt eine Bewegungsblockierung zum Anhalten von Bewegungen, Ändern von Betriebsarten und Umschalten von Seiten an bestimmten Seitengrenzen durch, veranlaßt die Aktualisierung von Seitenbildern auf dem Bildschirm durch Füllen von Abschnitten des Anzeigepuffers, die durch Seitenbewegungen von Seitenbildern freizulegen sind, und verwaltet die Umgebung (Datenstrukturen) der Anzeigesystemsoftware, die die genaue Skalierung und Übersetzung zwischen Seiten- und Anzeigekoordinaten ermöglicht.
- Das MOVER-Modul 154 ruft die Funktionen eines COMPOSER- Moduls 156, FILLER-Moduls 158 und CURSOR-Moduls 160 auf und "verbirgt" dadurch diese Detailebene vor dem DISPSYS-Modul 150.
- Das MOVER-Modul 154 operiert mit einem Satz von Datenstrukturen, die eine flexible Abbildung von Koordinaten zwischen Seiten- und Anzeigeraum vorsehen sollen und die die Genauigkeit der Koordinatenskalierung über nicht ganzzahlige ZOOM-Verhältnisse beibehalten. Diese Strukturen sind der ROLLBUF, das GRID und die ZONE.
- Wie zuvor diskutiert wurde, ist ein Anzeigepuffer ein physikalischer Anzeigespeicherpuffer, der aus dem VRAM auf der DDM-Platine zugewiesen ist. Die x-Begrenzung und Teilung jedes Anzeigepuffers ist mit 1024 Bildpunkten festgelegt, die y-Begrenzung ist mit 512 Zeilen festgelegt. Zwei oder vier dieser Puffer sind je nach Konfiguration der DDM-Platine verfügbar.
- Das Anzeigepunktraster (disp_bm) erscheint als logisch ringförmiger Puffer zur Bildschirmauffrischung, jedoch nicht zum prozessorzugriff (Softwarezugriff). Der Prozessor erkennt ein Speichertabellenbild jedes Puffers, der sich oberhalb dieses Puffers im Speicher befindet. Dadurch wird ein vertikal runder Puffer erzeugt, der einmal in die y-Richtung (an der Bildschirmunterseite) umlaufen kann. Der vollständig ringförmige logische Puffer wird zum prozessorzugriff durch softwareseitige Einrichtungen im Modul ROLLER 162 erzeugt, das im folgenden näher beschrieben ist.
- Die ROLLBUF-Struktur enthält Steuerinformationen für die softwareseitige Verwaltung des logisch ringförmigen Puffers. Insbesondere zeigt das Feld display_origin der ROLLBUF-Struktur auf das Anzeigepunktraster am Ursprungspunkt der Bildschirmauffrischung und entspricht somit dem Bildschirmursprung (linke obere Ecke). Das Feld screen_extent der ROLL- BUF-Struktur enthält die Bildschirmgröße, während das Feld disp_bm einen Zeiger auf die eigentliche VRAM-Zuweisung für diesen Anzeigepuffer enthält. Ein ROLLBUF wird jedesmal dann initialisiert, wenn ein OpenDisplay()-Aufruf erfolgt.
- Abwechselnde disp_bm-Zuweisungen werden für abwechselnde OpenDisplay()-Aufrufe verwendet, um eine "Pingpong-Puffer"- Anordnung zu erzeugen, um die Bildschirminitialisierung beim Umschalten der Anzeigebetriebsart zu "verdecken".
- Der zuvor erwähnte Anzeigeraum oder die Anzeigekoordinate ist eigentlich eine im ROLLBUF erzeugte virtuelle Bildschirmkoordinate. Anzeigekoordinaten werden durch den display_origin des ROLLBUF zum Zugriff auf das physikalische Anzeigepunktraster übersetzt. Zu dieser Übersetzung gehört der x- und y-Achsenumlauf an den Begrenzungen des Anzeigepunktrasters zur Erzeugung des Ringpuffers.
- Wie bereits festgestellt wurde, ist ein Quellpunktraster (src_bm) eine Einheit von DRAM-Speicherplatz für Seitenbilder oder gezeichnete Bilder. Die vorgenannten Seitenkoordinaten stehen in Relation zur Anfangsadresse der DRAM-Zuweisung für das in der PAGE-Struktur festgelegte Quellpunktraster. Außerdem enthält die ZOOM-Struktur das Verhältnis zweier Ganzzahlen, die eine Bildgrößentransformation (Skalierung) beim Kopieren eines Bilds aus einem src_bm in ein disp_bm mit einer der zoom_blt()-Funktionen festlegen. Das ZOOM-Verhältnis (Vergrößerung/Verkleinerung) ist als Bruch dest_cnt/ src_cnt definiert. Die zoom_blt()-Funktionen extrahieren exakt src_cnt Bildpunkte aus dem src_bm und schreiben bis zu dest _cnt Bildpunkte in den ROLLBUF. Weniger als dest_cnt Bildpunkte werden eingeschrieben, wenn ein Teil des Bilds außerhalb eines Abschneiderechtecks fällt, das im zoom_ blt()-Aufruf (siehe unten) festgelegt ist. Dieses Abschneiderechteck ist im Anzeigeraum definiert.
- Obwohl das ZOOM-Verhältnis als Verhältnis zweier Ganzzahlen ausgedrückt wird, ist das Verhältnis selbst möglicherweise nicht ganzzahlig. Beispielsweise legt das Verhältnis 20/7 fest, daß für jeweils sieben aus dem Seitenbild extrahierte Bildpunkte 20 Bildpunkte zur Anzeige geschrieben werden, was ein Skalierungsverhältnis (Vergrößerung) von 2,85714286... erzeugt. Daraus wird deutlich, daß Koordinatenumwandlungen zwischen der Seite und der Anzeige nur exakt sind, wenn die Quellordinaten exakte Vielfache von src_cnt sind (d. h., Vielfache von sieben in diesem Beispiel) oder die Anzeigeordinaten exakte Vielfache von dest_cnt sind (Vielfache von zwanzig in diesem Beispiel). Durch Gleitkommadarstellung von Koordinaten wird dieses Problem nicht gelöst, Fehler häufen sich dabei nur langsamer an.
- Fehler bei der Koordinatenumwandlung erzeugen ernste Bildqualitätsprobleme auf der Anzeige der DDM. Insbesondere wird der Ringanzeigepuffer kontinuierlich aus dem Seitenpuffer aktualisiert, um glatte Verschiebe- oder Rollbewegungen zu erzeugen. Treten Fehler beim Skalieren zwischen Seitenund Anzeigekoordinaten auf, werden Diskontinuitäten im angezeigten Bild sichtbar. Bei fortgesetzter Bewegung und insbesondere bei dynamischer Änderung der Abbildung von der Seite zum Bildschirm, um z. B. Einzeileneffekte zu erzeugen, können auflaufende Fehler bewirken, daß die Anzeige wortwörtlich "auseinanderfällt". Diese Artefakte werden als "Heftfehler" bezeichnet.
- Das Problem wird noch dadurch erschwert, daß im Ringanzeigepuffer kein möglicher fester Bezugspunkt vorhanden ist. Wie der Name bereits ausdrückt, hat der Ringpuffer eine kontinuierliche Oberfläche. Da der Puffer kontinuierlich aktualisiert wird, während sich seine Oberfläche über die Anzeige bewegt, hat der logisch ringförmige Puffer effektiv unendliche Begrenzungen. Somit leidet jeder Versuch, einen festen willkürlichen Bezugspunkt vorzusehen, schließlich unter einem numerischen Überlauf der Variablen als Darstellung der Bezugsordinaten.
- Zur Überwindung dieser Probleme wird das Konzept eines unendlichen Maschennetzes verwendet. Das Maschennetz existiert sowohl im Anzeigepunktrasterraum als auch im "Quell"- Koordinatenraum, wobei die Maschengröße gleich dest_cnt im disp_hm-Raum und src_cnt im Quellraum ist. Maschenschnittpunkte definieren die Punkte, an denen eine Skalierung zwischen Anzeige- und Quellkoordinaten fehlerfrei durchgeführt werden kann.
- Die GRID-Struktur verkörpert das Konzept eines unendlichen Maschennetzes. Das GRID stellt den Bezugs- oder "Anker"- Punkt im Anzeigepuffer her, von dem aus exakte Vielfache von src_cnt oder dest_cnt berechnet werden können. Hierbei handelt es sich um einen "gleitenden" Bezugspunkt: der Ankerpunkt des GRID folgt dem Ursprung des ROLLBUF im disp_bm, kann sich jedoch nur in Inkrementen von dest_cnt bewegen. Somit "läuft" der GRID-Ankerpunkt an der disp_bm-Begrenzung "um". Der GRID-Anker (das Feld grid_org in der GRID-Struktur) wird so initialisiert, daß es mit dem display_origin des ROLLBUF zusammenfällt, anschließend aber beim "Rotieren" des ROLLBUF "gleitet" (d. h., der Zeiger auf disp_bm läuft an der Begrenzung von disp_bm um). Das Feld grid_org des GRID zeigt stets auf den Anzeigepuffer an einem Punkt, der ein dest_cnt vom disp_org des ROLLBUF entfernt ist. Die GRID-Struktur stellt nur ein konzeptionelles Maschennetz dar: sie ist kein zweidimensionales Matrixfeld, wie es der Name nahelegen könnte.
- Die GRID-Struktur hat auch eine Begrenzung (das Feld grid_ext der GRID-Struktur), die in der Größe so bemessen ist, daß sie das erste Vielfache von dest_cnt ist, das größer als die Bildschirmauflösung in jeder Dimension ist. Dadurch können rationellere Aktualisierungen des Anzeigepunktrasters erfolgen, was später beschrieben wird. Berücksichtigt man das GRID zusammen mit seiner Begrenzung, kann es auch als "Fenster" zur Anzeige betrachtet werden, das besondere Ausrichtungseinschränkungen zum Skalieren implementiert.
- Ein GRID wird jedem aktuell im System installierten ZOOM zugewiesen. Mehrere GRIDs werden zugewiesen, wenn mehrere ZOOMs benötigt werden, z. B. um Lupen-Cursoreffekte vorzusehen. Außerdem kann der ROLLBUF als ständig vorhandenes "Eins- Gitter" angesehen werden, wobei ein ZOOM mit einem Skalierungsverhältnis von Eins installiert ist (src_cnt = dest_cnt = Eins). Die Zuweisung von Feldern im ROLLBUF entspricht der eines GRID, so daß ein "Abguß" in der Sprache "C" genutzt werden kann, um die Analogie zwischen ROLLBUF und GRID zu nutzen und die Übereinstimmung in der Art zu gewährleisten, wie alle Anzeigepufferaktualisierungen erfolgen.
- Die vorgenannten "Quell"-Koordinaten sind keine Quellpunktraster- oder Seitenkoordinaten. Statt dessen handelt es sich bei ihnen um auf Quelldimensionen skalierte Anzeigekoordinaten. Die Abbildung von Seitenkoordinaten zum Bildschirm erfolgt über das Gitter mit Hilfe von ZONE-Strukturen, die mit dem GRID verknüpft sind.
- ZONE-Strukturen legen ein Seitenpunktraster (src_bm), ein als "Quellrechteck" bezeichnetes Rechteck im Seitenraum (auf dem src_bm) und einen Versatz vom Quellrechteck zum Gitterursprung (den grid_offset) fest. Das grid_offset-Feld bildet eine Rechteckfläche im Seitenpunktraster zum Gitterursprung und somit zum Bildschirmursprung ab.
- ZONE-Strukturen werden durch das COMPOSER-Modul 156 auf Anforderung des MOVER-Moduls 154 aufgebaut. ZONEs werden für alle Bereiche auf einem Seitenpunktraster verwaltet, die in die Begrenzung des GRID der ZONE fallen. Koordinatentransformationen zwischen Quellpunktrastern und dem Bildschirm sind nur für die ZONEs auf einem speziellen Gitter definiert.
- Die ZONEs sind dem GRID in einer doppelt verknüpften Liste beigefügt, wobei die Felder first_zone und last_zone des GRID auf die Enden der Kette zeigen. Außerdem enthält das GRID Zeiger auf ZONEs entsprechend der oberen, unteren, linken und rechten Kante des Anzeigebildschirms. Obwohl dies eine zweidimensionale Abbildung impliziert, sind die ZONEs nur in einer linearen Kette verknüpft.
- Die ZONE-zeiger auf dem GRID werden in zwei Dimensionen verwaltet, damit die Funktion der Bewegungsblockierung des Mover() betriebsartenunabhängig sein kann. Bei Bedarf kann ein zweidimensionales "Netz" aus ZONE-Zeigern konstruiert werden, wobei jedoch eine eindimensionale Liste ausreicht, um die gewünschten Anzeigeeffekte zu erzielen.
- Fig. 21 ist ein Beispiel für die Abbildungsfunktion von ZONEs auf einem GRID: eine Anzeige in der kontinuierlichen Einzeilenbetriebsart, die (zu einer bestimmten Zeit) drei von einem Ende zum anderen aufgereihte Textzeilen in einem Absatz zeigt. Nur der am weitesten rechts liegende Abschnitt der linken Zeile ist auf dem Bildschirm sichtbar, die gesamte mittlere Zeile ist angezeigt, und nur der am weitesten links liegende Abschnitt der rechten Zeile ist dargestellt.
- Die drei Zeilen 163, 164 und 166 erscheinen auf der Originalseite eigentlich in vertikaler Folge.
- Die Anzeige wird aus drei entsprechenden ZONEs 168, 170 bzw. 172 erzeugt, jeweils mit einem Quellrechteck, das eine Textzeile auf dem Seitenbild einschließt und anhand des entsprechenden PAGE DESCRIPTOR aufgebaut ist, der durch den Formatanalysator ermittelt wurde. Jede ZONE hat ein grid_offset- Feld mit einem Wert entsprechend der Übersetzung des Quellrechteckursprungs zum Gitterursprung (linke obere Bildschirmecke), das die ZONE in der richtigen Reihenfolge auf dem Bildschirm plaziert.
- Um die Einzelzeile nach links über den Bildschirm zu bewegen, muß der Anzeigepuffer anhand der ZONE aktualisiert werden, die die rechte Kante des GRID überlappt (die right_zone auf dem GRID). Zum Verwalten der Gitterabbildung auf dem Bildschirm müssen die grid_offset-Felder aller drei ZONEs auf dem GRID durch das Bewegungsinkrement eingestellt werden. Folglich kann man sich GRIDs so vorstellen, daß sie sich durch ihre angefügten Zonen beim Rotieren des Rotierpuffers "hindurchbewegen". Daher ist ein GRID analog zu einem "Anzeigefenster" mit der Eigenschaft, daß sich nur bestimmte definierte Punkte in ihm fehlerfrei zum Anzeigekoordinatenraum abbilden können.
- Eine Koordinate gilt als "gegittert", wenn sie in Relation zu einem grid_origin auf einem GRID festgelegt ist. Eine solche Koordinate braucht nicht auf eine- Gittergrenze zu fallen, d. h., auf ein Vielfaches von src_cnt. Eine gegitterte Koordinate gilt als "gitterausgerichtet", wenn sie auf ein Vielfaches von src_cnt fällt.
- Seitenpunktraster (src_bm) werden nicht gegittert. Die Quellrechtecke (src_rects) von ZONEs werden beim Übersetzendurch den grid_offset der ZONE zum Gitter gegittert. Ein src _rect ist gitterausgerichtet, wenn sein Ursprung so ausgerichtet ist, daß er auf eine Grenze mit dem Vielfachen von src _cnt fällt (ein Gitterschnittpunkt).
- Das FILLER-Modul 158 des Anzeigeteilsystems stellt src _cnt-Grenzen so ein, daß sie gitterausgerichtet sind. Die Zoom-Bildpunktblockübergaben ("BLTs") 174, 176, 178 und 180, die nachfolgend erzeugt werden, sind dadurch in Anfang und Ende auf Gitterschnittpunkte eingeschränkt. Dies gewährleistet eine Registerhaltigkeit von Anzeigebildern, die aus Quellbildern zusammengefügt sind. Zoom-BLTs können im Anzeigeraum so abgeschnitten werden, daß sich Grenzen für die eigentlichen BLTs außerhalb des Gitters befinden können. Die Positionsgenauigkeit an Grenzen beträgt plus oder minus einen halben Bildpunkt. Die perfekte Registerhaltigkeit von Bildern und daher das "Zusammenheften" von Bildern wird durch Koordinatengitterung gewährleistet. Es verbleibt nur die Unsicherheit an der Grenzposition im Hinblick auf das Abschneiden außerhalb des Gitters. Die Verwendung von GRIDs und ZONEs in diesem Gitterungs- und Abschneideverfahren wird im folgenden näher diskutiert.
- Die Funktion GetCursor() des DISPSYS-Moduls 150 kann nunmehr im Hinblick auf die Verwendung von GRIDs und ZONEs beschrieben werden.
- Zunächst wird der Anzeige-Cursor zum Quellgitterraum umgewandelt, indem er anhand des "Pufferversatzes" zwischen dem grid_origin des GRID und dem display_origin des ROLLBUF korrigiert und anschließend auf Quellkoordinaten skaliert wird. Skalieren mit Runden erzeugt einen Fehler von plus oder minus einem halben Bildpunkt im Quellraum.
- Danach werden alle am GRID angefügten ZONEs auf ein gegittertes Quellrechteck durchsucht, das den gegitterten Quell-Cursor einschließt. Das gegitterte Quellrechteck ist das Quellrechteck auf der durch den grid_offset der ZONE übersetzten Seite. Bei Nichtfeststellung eines einschließenden Rechtecks ist der Anzeige-Cursor im Seitenraum undefiniert (überlagert kein angezeigtes Seitenmerkmal). Bei Feststellung eines einschließenden Rechtecks wird der gegitterte Quell-Cursor zum Seitenraum übersetzt, wobei das grid_offset- Feld für die das einschließende Rechteck enthaltende ZONE verwendet wird. Dies ist der Seiten-Cursor.
- Der beschriebene Rundungsfehler von einem halben Bildpunkt könnte durch Rückführen eines Rests zusammen mit dem ganzzahligen skalierten und übersetzten Cursor-Wert verringert werden. Ohne die zusätzliche Komplexität ist die Genauigkeit jedoch mehr als ausreichend. Durch die Genauigkeit der Umwandlung vom Anzeige-Cursor zum Seiten-Cursor und die Genauigkeit der umgekehrten Umwandlung kann der Benutzer eine Bildgröße (Zoomwert) auf dem Bildschirm sowie Darstellungsbetriebsarten ändern, ohne daß eine merkliche Verschiebung der Bildposition in Bildschirmmitte sichtbar wird.
- Die wichtigen Einzelheiten der Mover()-Funktion können nunmehr im Hinblick auf ROLLBUFs, GRIDs und ZONEs beschrieben werden. Die MoveCursor()-Funktion im DISPSYS-Modul 150 ruft die Mover()-Funktion im MOVER-Modul 154 auf, um ihre Funktion abzuarbeiten. Seinerseits ruft der Mover() eine Folge von Funktionen auf, die für das MOVER-Modul 154 lokal sind, um das zugeführte Bewegungsdelta (d. h., die inkrementale Bewegungsänderung) zu verarbeiten.
- Zuerst erfolgt ein Aufruf von PositionCursor(), wenn ein EXPLICIT-Cursor angezeigt wird. Diese Funktion verbraucht das Delta, sofern der Cursor nicht an der Bildschirmkante positioniert ist. Außerdem führt sie eine Cursorpositionsverwaltung (Neuzeichnungsverwaltung) durch. Verbleibt eines der zugeführten Deltas, ruft der Mover() als nächstes die Funktion ClampMotion() auf. ClampMotion() untersucht vorausschauend die End-ZONEs (linke, rechte, obere und untere ZONE), um zu bestimmen, ob das Delta eine src_rect-Kante der End-ZONE über die Anzeige-Cursormitte hinaus bringt. Ist das der Fall, wird das Delta blockiert, um eine Bewegung über die Mitte des Anzeige-Cursors hinaus zu verhindern.
- Die Wirkung von ClampMotion() hängt von der Anordnung von ZONEs ab, die auf dem GRID durch die COMPOSER-Funktion aufgebaut sind. Beispielsweise ist in der Anzeigebetriebsart manuelle Ansicht eine einzige, den Rändern des Seitenbilds entsprechende ZONE sowie ein IMPLICIT-Cursor in Bildschirmmitte vorhanden. In diesem Fall verhindert ClampMotion(), daß. die Kanten des Seitenbilds über die Bildschirmmitte hinaus verschoben oder gerollt werden.
- Im Fall der Betriebsart automatische Zeilenverschiebung sind mehrere ZONEs an das Seiten-GRID entsprechend horizontal aneinandergereihten Textzeilen angefügt, und es wird ein auf die Mitte bezogener Cursor vom Typ IMPLICIT verwendet. Da neue ZONEs immer dann konstruiert werden, wenn End-ZONEs in das GRID eintreten, stoppt ClampMotion() die Anzeigeverschiebung nur, wenn die letzte Zeile der Seite die Bildschirmmitte erreicht (oder die erste Zeile bei umgekehrter Verschiebebewegung). Eine Rollbewegung wird blockiert, wenn die Unteroder Oberseite der mittigen End-ZONEs die Bildschirmmitte erreicht.
- Mover() führt einen Blockiercode zur aufrufenden Betriebsartenfunktion zurück. Im soeben beschriebenen Beispiel kann ein zurückgeführter Blockiercode als Anzeige einer Blockierung für TOP oder BOTTOM verwendet werden, um einen automatischen Übergang zur automatischen Spaltenbetriebsart durchzuführen, indem die Anzeige mit dem Zeiger der COMPOSER- Funktion AutoColumn() in der DISPLAY-Struktur geschlossen und danach wieder geöffnet wird.
- Bei einem Cursor vom Typ EXPLICIT verhindert ClampMotion(), daß sich eine beliebige ZONE über die Mitte des Anzeige-Cursors hinaus bewegt. Da der Cursor an der Bildschirmkante positioniert sein muß, um Verschiebe- oder Rollbewegungen hervorzurufen, wird der Cursor effektiv ständig über dem Seitenbild gehalten, wodurch sich die Seitenkante auf dem Bildschirm gerade ausreichend bewegen kann, damit der Benutzer auf alle gültigen Flächen auf der Seite zeigen kann.
- Verbleibt ein Delta nach Cursorblockierung, ruft Mover() anschließend die Funktion RollBuffer() auf. RollBuffer() bewegt seinerseits den display_origin des ROLLBUF um das Delta vorwärts und kontrolliert dabei auf das Umlaufen des Anzeigepunktrasters an jeder der vier Anzeigepufferkanten. Liegt der display_origin tatsächlich hinter einer Pufferkante, wird er durch die Anzeigepufferbegrenzung so justiert, daß er "umläuft". Dadurch wird die logisch ringförmige Charakteristik des ROLLBUF beibehalten.
- Als nächstes durchläuft RollBuffer() die am ROLLBUF angefügten GRIDs und bewegt dabei den grid_org des GRID im Anzeigepunktraster nur vorwärts, wenn das empfangene Delta den grid_org um ein Vielfaches von dest_cnt bei Addition zu den zuvor akkumulierten Deltas bewegt. Ist dies der Fall, wird der grid_org um das Vielfache von dest_cnt vorwärts bewegt, wobei der verbleibende Abschnitt des Delta im Akkumulator des GRID aufbewahrt wird. Der grid_org für jedes GRID wird auf das Umlaufen des Anzeigepunktrasters an jeder der vier Anzeigepufferkanten geprüft und gemäß der Beschreibung für den ROLLBUF eingestellt. Bei Vorwärtsbewegung des grid_org wird das Feld "incr" (Inkrement) so gesetzt, daß es die Anzahl von dest_cnts für die Inkrementalbewegung enthält. Dieses Feld wird später verwendet, um die Notwendigkeit von Anzeigeaktualisierungen zum ROLLBUF zu detektieren.
- Ferner wird für jedes GRID der Versatz zwischen dem grid_org und dem buffer_org des ROLLBUF im Anzeigepuffer festgestellt. Dieser Wert wird zum Übersetzen von Anzeige- Cursorkoordinaten in den Gitterraum benötigt und wird gespeichert und nicht bedarfsweise berechnet, da eine Berechnung inbegriffen ist. Insbesondere benötigt die Berechnung des Pufferversatzes eine Prüfung auf die Fälle, in denen ein Ursprung an einer Pufferkante umgelaufen ist und der andere nicht. Der richtige Versatzwert ist immer kleiner als ein dest_cnt, da er eine Entfernung in einem logisch ringförmigen Puffer, nicht im physikalischen Anzeigepunktraster, widerspiegelt.
- Wurde das "incr"-Feld eines GRID durch die RollBuffer()- Funktion eingestellt, ist eine weitere Verarbeitung erforderlich, um die ZONEs auf dem GRID zu aktualisieren und den Anzeigepuffer zu aktualisieren. Zunächst wird die Funktion CheckZones() aufgerufen.
- CheckZones() überprüft die End-ZONEs auf dem GRID, um festzustellen, ob das Bewegungsinkrement ZONE-Kanten auf das GRID bringt. Ist das der Fall, wird die bei Opendisplay() zugeführte COMPOSER-Funktion verwendet, um ZONEs solange zu holen, bis das GRID wieder vollständig mit ZONEs ausgelegt ist. Außerdem kontrolliert CheckZones(), ob ZONEs das GRID vollständig verlassen. Wenn ja, wird die ZONE direkt abgetrennt und freigegeben.
- Danach wird die Funktion MoveZones() aufgerufen. Move- Zones() justiert die grid_offset-Felder aller ZONEs auf dem GRID um das Inkrement des GRID. Durch dieses Verfahren wird die richtige Abbildung von Seitenquellbereichen auf dem Bildschirm beibehalten, wenn sich das GRID durch die ZONEs "bewegt".
- Abschließend wird UpdateForRoll() aufgerufen. Diese Funktion baut ein Aktualisierungsrechteck auf, das einen Bereich auf dem GRID im gegitterten Quellraum zum Aktualisieren zum Anzeigepuffer durch das FILLER-Modul festlegt. Beispiels- weise wird für ein positives x-weises Inkrement von zwei ein Aktualisierungsrechteck aufgebaut, das eine Fläche auf dem Gitter wie folgt festlegt: Unterseite x Ordinate am Gitter x Begrenzung und Oberseite x Ordinate am Gitter x Begrenzung minus 2 * src_cnt. Die y-Ordinaten der Ober- und Unterseite überspannen die Höhe des GRID. Dies ist die Fläche, die an der Kante des ROLLBUF durch das anstehende Delta und nachfolgende Deltas bis zum nächsten Inkrement aufgedeckt wird. Danach ruft UpdateForRoll() die Filler()-Funktion mit dem Aktualisierungsrechteck auf, um die eigentliche Pufferaktualisierung durchzuführen (siehe nachfolgende Abschnitte).
- Nachdem der ROLLBUF und das -GRID aktualisiert wurden, wird die Funktion TrackCenter() aufgerufen, um zu gewährleisten, daß eine "Mittelzone" mit einem den Bildschirm in Gitterraummitte einschließenden Rechteck verwaltet wird. Bei dieser "Mittelzone" handelt es sich in Wirklichkeit um die beiden Zeiger auf die gleiche ZONE, die auf den End-ZONE-Zeigern des GRID orthogonal zur Hauptbewegungsachse für die Betriebsart gehalten werden. Obwohl die ZONE-Liste streng eindimensional ist, muß der Anschein eines zweidimensionalen Abbilden von ZONEs beibehalten werden, um die Bewegungsblockierung betriebsartenunabhängig zu machen. Schließlich erfolgt ein Aufruf der untergeordneten Funktion VidSetOrigin(), die den Anzeigeauffrischungspunkt im Anzeigepuffer um das zur Aktualisierung des ROLLBUF verwendete Delta bewegt. Dieser Aufruf wird beim nächsten vertikalen Anzeigeaustastintervall wirksam, was die eigentliche Bildschirmbewegung auf der Anzeige erzeugt, die zur Anzeigeauffrischung durch zuvor beschriebene hardwareseitige Einrichtungen ringförmig gemacht ist.
- Die Verwaltungsschicht für die Anzeigeaktualisierung des DDM-Anzeigeteilsystems weist drei Codemodule auf: den FILLER 158, den COMPOSER 156 und den CURSOR 160. Zunächst wird das FILLER-Modul beschrieben.
- Wie zuvor diskutiert wurde, verbirgt der FILLER das Gitterungs- und Abschneideverfahren von Rechtecken im Seitenraum, um Anzeigepufferaktualisierungen unter Verwendung der Schablonenzoom-PIXBLTs mit perfekter Bildregisterhaltigkeit zu erzeugen. Zwei Hauptfunktionen werden vom FILLER-Modul bereitgestellt: Filler() und UpdatePage(). Die Filler()-Funktion erzeugt Anzeigepufferaktualisierungen auf der Grundlage eines zugeführten Aktualisierungsrechtecks im Gitterraum. UpdatePage() ähnelt Filler(), verwendet jedoch ein Aktualisierungsrechteck im Seitenraum. Beide FILLER-Funktionen führen Zeiger zum ROLLBUF und zum GRID zur Aktualisierung.
- Die Filler()-Funktion durchläuft alle ZONEs, die mit dem zugeführten Gitter verknüpft sind. Für jede derartige ZONE wird das Quellrechteck der ZONE auf das GRID mittels des grid_offset der ZONE übersetzt (d. h., das Quellrechteck wird "gegittert"). Danach wird das gegitterte Quellrechteck mit dem zugeführten Aktualisierungsrechteck verglichen, das auf dem GRID liegt (d. h., im Gitterraum festgelegt ist). Wird festgestellt, daß das gegitterte Quellrechteck das Aktualisierungsrechteck schneidet, so wird ein Rechteck ermittelt, das alle Schnittpunkte aufweist (als "Gitterquell-Aktualisierungsrechteck" bezeichnet).
- Für jedes derartige ermittelte Gitterquell-Aktualisierungsrechteck wird eine BLT_DESCRIPTOR-Struktur erzeugt, die zum ROLLER-Modul 162 geführt wird. Die BLT_ DESCRIPTOR-Struktur legt eine Anzeigepufferaktualisierung im Hinblick auf folgendes fest: ein Abschneidefenster "win", das ein Rechteck im Anzeigeraum ist, einen Anfangspunkt "dest" für das Aktualisierungsziel, der ein Punkt im Anzeigeraum ist, einen Zeiger auf das Quellpunktraster "src_bm" für die Seite, ein Quellrechteck "src" im Seitenraum und ein Feld "type" zum Anzeigen des Typs der PIXBLT, die zur Aktualisierung zu verwenden ist.
- Ein Matrixfeld aus BLT_DESCRIPTORs wird für alle festgestellten Gitterquellrechtecke aufgebaut. Dieses Matrixfeld wird zum ROLLER-Modul geführt, anstatt ROLLER für jede einzelne Aktualisierung aufzurufen. Dies erfolgt, um die Berechnung schwarzer "Maskierungs"-Füllungen zu ermöglichen, was nachstehend beschrieben ist.
- Das Gitterungs- und Abschneideverfahren, das ein genaues Aneinanderheften von PIXBLTs gestattet, wird durchgeführt, während jedes Gitterquellrechteck zum Aufbau eines BLT_ DESCRIPTOR verwendet wird. Zunächst wird das Gitterquellrechteck in den Anzeigeraum mit Hilfe des dem GRID beigefügten ZOOM-Verhältnisses skaliert. Dieses skalierte Rechteck ist das Abschneidefenster "win" des BLT_DESCRIPTOR. Die Skalierung erfolgt mit Rundung, so daß sich ein Fehler von plus oder minus einem halben Bildpunkt ergeben kann. Dieser Fehler betrifft nur die Kantenposition von Seitenmerkmalsgrenzen, die auf dem Bildschirm sichtbar sind. Die absolute Positionierung (und somit das Bild-Aneinanderheften) wird mit perfekter Genauigkeit beibehalten.
- Anschließend wird das eigentliche Quellrechteck auf der Seite (im Quellpunktraster) bestimmt. Dazu werden die Grenzen des Gitterquellrechtecks durch Abbrechen gitterausgerichtet. Das Abbrechen erfolgt am Ursprung des Gitterquell-Aktualisierungsrechtecks ("gsu_rect") nach der Gleichung: gridded_gsu_rect_top(x, y) ist gleich dem Produkt aus src_cnt und dem ganzzahligen Teil von (gsu_rect_top(x,y)/src_cnt). Dadurch wird der Ursprung des Gitterquell-Aktualisierungsrechtecks zurück zum nächstgelegenen Gitterschnittpunkt bewegt.
- Die untere Koordinate des Gitterquell-Aktualisierungsrechtecks wird durch ähnliches Abbrechen gitterausgerichtet: gridded_gsu_rect_top(x, y) ist gleich dem Produkt aus src_cnt und dem ganzzahligen Teil von ((gsu_rect_top(x, y) + src_cnt)/src_cnt). Die Addition von src_cnt zur Abbrechgleichung bewirkt eine Vorwärtsausrichtung der Unterseitenkoordinate des Gitterquell-Aktualisierungsrechtecks zum nächsten Gitterschnittpunkt.
- Das im BLT_DESCRIPTOR festgelegte Quellrechteck ist das gegitterte gsu-Rechteck, das mittels des grid_offset der ZONE zurück in den Seitenraum übersetzt ist. Ein Zielpunkt gemäß der Festlegung in der BLT ist ein Anfangspunkt, der durch Skalieren der Oberseitenkoordinate des gegitterten gsu-Rechtecks zum Anzeigeraum ermittelt wird. Diese Operation erfolgt fehlerfrei, da die Koordinate gitterausgerichtet wurde.
- In folgenden wird die Verwendung des Abschneidefensters in den BLT-Operationen des Schablonenzooms erläutert. Sowohl die eindimensionalen, zum nächsten Nachbarn gehenden als auch die zweidimensionalen geglätteten Schablonenzoom-BLTs funktionieren durch Extrahieren von src_cnt-Bildpunkten aus dem Seitenbild, Berechnen eines Tabellenindex anhand des extrahierten Quellfelds und anschließendes Kopieren der ermittelten, mit dest_cnt in der Größe eingestellten Schablone mit Hilfe des Index in das Anzeigepunktraster. Das Aneinanderheften der so kopierten Bilder kann nur gewährleistet sein, wenn die extrahierten Quellbereiche so zu Kanten liegen, daß die Entfernungen ein exaktes Vielfaches von src_cnt betragen. Somit dürfen die Kanten von BLTs nicht willkürlich plaziert werden, und es muß ein gewisser anderer Mechanismus zur Kantenplazierung mit größerer Feinheit als einem src_cnt vorgesehen sein.
- Die genaue Kantenplazierung wird durch Abschneiden erreicht. Das Abschneidefenster ist ein Rechteck mit Koordinaten im Anzeigeraum. Die ein- und zweidimensionalen Schablonenzoom-BLTs verwenden dieses Fenster (nach Übersetzung in Anzeigepufferkoordinaten), um das Schreiben eines Bildpunkts zu verhindern, der außerhalb des Fensters fällt. Anders ausgedrückt ist das Schreiben von Bildpunkten zum Anzeigepuffer auf den Bereich innerhalb des Abschneidefensters beschränkt. Quellbildpunkte werden durch die BLT unabhängig davon wiedergewonnen, wohin sie im Hinblick auf das Fenster fallen werden, und können daher mit besonderer Ausrichtung verwaltet werden.
- Nunmehr kann der Effekt der Gitterungs- und Abschneideoperationen untersucht werden. Da das BLT_ DECRIPTOR-Quellrechteck und der Zielpunkt gitterausgerichtet wurden, haben nachfolgende Zoom-BLTs stets Ausrichtungen, die genau ein Vielfaches von src_cnt und ein Vielfaches von dest_cnt betragen. Somit ist die Schablonenausrichtung stets über einen Bereich des Dokumentbilds unabhängig von der Reihenfolge der Pufferbewegungen wiederholbar. Eine Kantenauflösung unter einem dest_cnt ist durch das Abschneidefenster vorgesehen. Auch der Rundungsfehler, der beim Skalieren von Quellkoordinaten zu Anzeigekoordinaten bei der Fensterberechnung auftritt, ist wiederholbar. Folglich erzeugt das Abschneiden für Bereiche innerhalb einer ZONE niemals Lücken im angezeigten Bild, unabhängig von der Kantenlage des ursprünglichen Aktualisierungsrechtecks.
- Zuvor wurde erwähnt, daß die GRID-Begrenzung in der Größe stets so eingestellt wird, daß sie ein Vielfaches von dest_cnt ist. Aufgrund dessen sind die durch den Mover() zum Filler() geführten Aktualisierungsrechtecke gitterausgerichtet. Der Filler() arbeitet ordnungsgemäß mit Aktualisierungsrechtecken, die nicht dieses Ausrichtungskriterium erfüllen. Dabei sind jedoch die durch das gitterausgerichtete Aktuahsierungsrechteck erzeugten Aktualisierungen besonders rationell. Wäre das Aktualisierungsrechteck nicht gitterausgerichtet, dann würde die Grenzkante zwischen zwei Aktualisierungen einen Bereich erzeugen, in dem eine anhand von src_cnt in der Größe eingestellte Fläche zweimal aus dem Seitenbild wiedergewonnen wird (einmal für jede Aktualisierung), wobei die genaue Grenzlage durch Abschneiden erzeugt wird. Bei einem ausgerichteten Aktualisierungsrechteck ist für die Grenze kein Abschneiden notwendig, und jeder Bildpunkt im Seitenbild wird nur einmal wiedergewonnen.
- Die Größeneinstellung der Gitterbegrenzungen und der Betrieb des Mover() erzeugen versteckte Aktualisierungen. Für positive Deltas werden die Anzeigepufferaktualisierungen an der Gitterbegrenzung erzeugt, die größer als die Bildschirmbegrenzung ist. Dadurch sind die Aktualisierungen versteckt, bis der Ursprung der Bildauffrischung durch VidSetOrigin() bewegt wird, um den neuen Bereich freizulegen. Für negative Deltas eilt der grid_origin des GRID dem display_origin des ROLLBUF voraus (ist weniger positiv als dieser). Aktualisierungen erfolgen am GRID-Ursprung für negative Deltas und sind somit verborgen.
- Nach Aufbau von BLT_DESCRIPTORs für alle ZONEs, die das Aktualisierungsrechteck im Gitterraum überlappen, ruft die Filler()-Funktion die Funktion Mask() auf, umweitere BLT_ DESCRIPTORs zu berechnen, wodurch Füllrechtecke mit schwarzen Bildpunkten für die Flächen des Aktualisierungsrechtecks festgelegt werden, die nicht durch ZONEs abgedeckt sind. Die Mask()-Funktion berechnet die schwarzen Maskierungsfüllungen mittels einer verknüpften Liste von Füllrechtecken (FRECTs), um das dynamische Sortieren zu vereinfachen. Die FRECT-Liste wird mit einem einzelnen FRECT initialisiert, das eine schwarze Füllung festlegt, die die gesamte Fläche des anfänglich zum Filler() geführten Aktualisierungsrechtecks abdeckt. Für jeden BLT_DESCRIPTOR auf dem durch Filler() erzeugten Matrixfeld wird die Liste von FRECTs auf ein Füllrechteck kontrolliert, das das Abschneidefenster des BLT_DESCRIPTOR schneidet. Bei Feststellung eines Schnittpunkts wird das FRECT aus der Liste gelöscht und durch null bis vier FRECTs ersetzt, die zum Füllen der Fläche um das Abschneidefenster des BLT_DESCRIPTOR bis zu den Grenzen des alten FRECT notwendig sind.
- Dieser "Teile-und-herrsche"-Algorithmus zum Ermitteln schwarzer Füllrechtecke erzeugt Füllrechtecke, die prazise alle Lücken zwischen den BLT-Fenstern mit minimaler Anzahl von Füllungen bedecken. Nach Kontrolle aller BLT_DESCRIPTORs wird die Liste der FRECTS in BLT_DESCRIPTORS umgewandelt, wobei die Füllfläche im win-Feld festgelegt und der Typ auf FILL_TYPE eingestellt ist. Die so aufgebauten BLT_DESCRIPTORs werden an die durch den Filler() aufgebaute Liste angehängt.
- Die Erzeugung schwarzer Maskierungsfüllungen für die Flächen zwischen ZONEs auf dem GRID ist eine einfache Möglichkeit, wesentliche Anzeigeeffekte zu erhalten.
- Anzeige-VISORS (Blenden) werden automatisch erzeugt. Wünschenswert ist, Bereiche des Seitenbilds oberhalb und unterhalb der hintereinander in der Betriebsart automatische Einzeilenverschiebung angezeigten TEXT_LINEs zu verbergen. Dieser Effekt wird einfach durch Aufbauen von ZONEs mit der Höhe von Textzeilen gemäß der Feststellung durch den Formatanalysator erreicht. Die so realisierten VISORS sind Polygone und können sich auch dann richtig auf Textzeilenhöhe einstellen, wenn Textzeilen verschiedener Höhe gleichzeitig auf dem Bildschirm erscheinen.
- Durch richtiges Einstellen der grid_otifset-Felder der ZONE werden ferner die Enden angrenzender Textzeilen mit einem durchgangigen Wortabstand aneinandergereiht. Die zwischen beabstandeten ZONEs erzeugten schwarzen Maskierungsfüllungen verbergen alle Grafiklinierungen oder Störflecke, die horizontal an so beabstandete Textzeilen angrenzen. Die in der Betriebsart automatisches Einspaltenrollen erzeugten ZONEs werden durch den gleichen Mechanismus vertikal mit Blenden versehen.
- Wünschenswert ist, daß der Benutzer die Kanten des Seitenbilds in der manuellen Betriebsart auf den Bildschirm verschieben oder rollen kann. Dies wird zu einem einfachen Fall, bei dem eine ZONE-Kante auf das Gitter bewegt wird, ohne daß eine nächste ZONE verfügbar ist. Für die Fläche hinter der Seitenkante werden durch den Filler() keine BLTs erzeugt. Folglich wird die Fläche hinter der Seitenkante mit schwarzen Maskierungsfüllungen aktualisiert, was den gewünschten schwarzen Hintergrund für die außerhalb der Seite liegenden Bereiche ergibt.
- Nach Aufrufen der Mask()-Funktion ruft Filler() die Funktion Rollblt() auf, wobei das Matrixfeld aus BLT_ DESCRIPTORs im Füll und Maskierverfahren erzeugt ist. Roll- blt() versteckt die Operationen, die zum Umwandeln des logischen Anzeigeraums im ROLLBUF in den physikalischen Speicherraum im Anzeigepunktraster für die BLTs erforderlich sind. Im folgenden wird die Operation von Rollblt() näher beschrieben.
- Die andere im FILLER-Modul implementierte Funktion ist UpdatePage(). Diese Funktion implementiert die Funktion UpdateDisplay() im DISPSYS-Modul. UpdatePage() akzeptiert ein Aktualisierungsrechteck im Seitenraum und nicht im Gitterraum wie bei Filler(). Alle ZONEs auf dem zugeführten GRID werden nach einem Quellrechteck im Seitenraum durchsucht, das das Aktualisierungsrechteck schneidet. Bei Feststellung eines Schnittpunkts wird ein Schnittflächen begrenzendes Rechteck ermittelt und in den Gitterraum mit Hilfe des grid_offset- Felds der ZONE übersetzt. Liegt dieses Rechteck auf dem GRID und damit auf dem Anzeigebildschirm, wird das Rechteck in einem Verfahren gitterausgerichtet und abgeschnitten, das mit dem zuvor für den Filler() beschriebenen identisch ist. Die so aufgebauten BLT_DESCRIPTORs werden direkt zum Roller() geführt, da für diese Funktion keine maskierenden Füllungen gewünscht sind.
- Der Effekt von UpdatePage() besteht darin, auf dem Bildschirm jeden Abschnitt des Quellpunktrasters zu aktualisieren, der sich seit dem anfänglichen Bildschirmaufbau mit den Filler()-Aufrufen geändert haben kann. Beispielsweise kann das Quellpunktraster das Bild eines Menübildschirms enthalten. Wählt der Benutzer einen Menüpunkt aus, wird ein Hervorhebungseffekt, eine Schiebersteuerung oder ein anderer grafischer Effekt in das Quellpunktraster gezeichnet. Danach wird das Bild auf dem Bildschirm aktualisiert, um das modifizierte Seitenbild über den UpdatePage()-Aufruf widerzuspiegeln. Das vorstehend beschriebene Gittern und Abschneiden von BLTs gewährleistet, daß sich die aktualisierte Bildfläche nahtlos an das bereits im Anzeigepuffer vorhandene Bild anheftet.
- Das COMPOSER-Modul 156 befindet sich in der Verwaltungsschicht zur Anzeigeaktualisierung und weist eine Gruppe von Funktionen auf, die ZONEs auf GRIDs aufbauen, um die Seitendarstellungseffekte zu erzielen, die zur Implementierung der unterschiedlichen Benutzerbetriebsarten notwendig sind. Wie zuvor erwihnt ist, wird die zur Realisierung einer speziellen Anzeigebetriebsart benötigte COMPOSER-Funktion als Funktionszeiger beim OpenDisplay( )-Aufruf zugeführt.
- Jeder COMPOSER-Funktion wird ein Zeiger auf das GRID, ein Zeiger auf CUR_LOC (Cursorstelle) und ein Richtungskennzeichen zugeführt. Das Richtungskennzeichnen zeigt an, ob die neuen ZONEs zur TOP, LEFT, RIGHT oder BOTTOM Kante des GRID oder zum CENTER zuzufügen sind. Die CENTER-Kennzeichnung zeigt an, daß ein neues GRID gerade initialisiert wird und ZONEs beginnend am Anzeige-Cursorpunkt und bis hinaus zu allen GRID-Kanten gemäß der Logik der speziellen Anzeigebetriebsart aufzubauen sind, die durch diese COMPOSER-Funktion implementiert ist.
- Der Fall der GRID-Initialisierung (CENTER-Kennzeichnung) ist von besonderem Interesse, da darauf geachtet werden muß, den neuen Bildschirm zwecks ordnungsgemäßer Ausrichtung genau zu initialisieren. Die lokale Modulfunktion FindFirstZone() wird von allen Hauptfunktionen des CURSOR-Moduls verwendet, um das Initialisierungsverfahren einzuleiten.
- Zunächst ruft FindFirstZone() die Funktion FindBox() auf. FindBox() wird der Kopf der Seitenbeschreibung (Matrixfeld von PAGE_DESCRIPTORs) sowie die Ebene des gesuchten PAGE_DESCRIPTOR (Textzeile, Textspalte usw.) und der Seiten- Cursor zugeführt. Anschließend ermittelt FindBox() den PAGE _-DESCRIPTOR der festgelegten Ebene mit einem Rahmen, der am nächsten zum Cursorpunkt liegt.
- FindBox() ermittelt den nächstgelegenen Rahmen zu einem Punkt durch Prüfen auf Einschluß des Punkts durch einen Rahmen. Der Punkt kann durch vier, zwei oder keine Seite des Rahmens eingeschlossen sein. Auf der Grundlage der Richtung des für jeden Rahmen festgestellten Nichteinschlusses wird eine nächstgelegene skalare Quadratentfernung zwischen dem Punkt und dem Rahmen wie folgt berechnet:
- 1) kein Einschluß: Quadrat der Diagonallinie zur nächstgelegenen Ecke;
- 2) Einschluß durch zwei Seiten: Quadrat der Orthogonallinie zur nächstgelegenen Seite; und
- 3) Einschluß durch vier Seiten: Entfernung Null.
- FindBox() sucht, bis ein einschließender Rahmen ermittelt ist, oder durchsucht alle Rahmen der festgelegten Ebene auf die minimale Entfernung. Ein Zeiger auf den PAGE_ DESCRIPTOR, der den nächstgelegenen Rahmen enthält, wird zurückgeführt.
- Anschließend weist FindFirstZone() Speicher für die Anfangs-ZONE zu und füllt die verschiedenen Felder der ZONE anhand des PAGE_DESCRIPTOR aus. Dies ist ein einfaches Verfahren mit der Ausnahme, daß das grid_offset-Feld der Anfangs- ZONE mit Hilfe der Koordinaten sowohl des Anzeige-Cursors als auch des Seiten-Cursors ermittelt wird. Schließt der nächstgelegene ermittelte PAGE_DESCRIPTOR-Rahmen nicht den Seiten- Cursor ein, positioniert der resultierende grid_offset die ZONE nicht in Bildschirmmitte. Um diesen Zustand zu korrigieren, ist eine separate Funktion CheckFirstZone() vorgesehen. Wird der Zustand festgestellt, stellt CheckFirstZone() den grid_offset der ZONE ein, um ihn auf die Bildschirmmitte zu ziehen, indem die Vektorentfernung der nächstgelegenen Seite des Quellrechtecks der ZONE zur Bildschirmmitte ermittelt und diese Vektorentfernung vom grid_offset subtrahiert wird.
- Bestimmte Felder in der ZONE-Struktur haben eine betriebsartenspezifische Verwendung. Diese Felder werden nicht durch den betriebsartenunabhängigen FindFirstZone()-Code eingestellt. Diese Felder werden durch die aufrufende COMPOSER- Funktion zugewiesen. Beispielsweise wird das "align"-Feld auf die für Textzeilen ermittelte untere Grundlinie in der Betriebsart AutoPanLines eingestellt, aber nicht in der Betriebsart AutoScrollColumns. Die Grundlinie wird zum Einstellen des grid_offset-Felds nachfolgender Textzeilen-ZONEs so verwendet, daß der Text durch die Grundlinie und nicht durch die Rahmenunterseite ausgerichtet wird, da die Position der Rahmenunterseite davon abhängt, ob die Textzeile Zeichen mit Unterlängen enthält.
- Nach Aufrufen von FindFirstZone() und Zuweisen von betriebsartenabhängigen Feldern schließt die COMPOSER-Funktion die GRID-Initialisierung durch Aufrufen von betriebsartenspezifischen Funktionen ab, die ZONEs von der Mittel-ZONE nach außen zu den GRID-Kanten aufbauen. Beispielsweise ruft die COMPOSER-Funktion AutoPanLines() GetTLZonesRright() und anschließend GetTLZonesLeft() auf, um das GRID mit ZONEs zu füllen.
- Nachdem nun die GRID-Initialisierung beschrieben wurde, kann die Ereignisabfolge nachvollzogen werden, die bei Initialisierung einer neuen Anzeigebetriebsart abläuft.
- Die OpenDisplay()-Funktion. im DISPSYS-Modul weist zunächst den ROLLBUF zu und initialisiert diesen und ruft anschließend die lokale Modulfunktion NewGrid() auf, um ein GRID zuzuweisen und zu initialisieren. Dazu gehört das Aufbauen einer neuen ZOOMSETTING und die Berechnung der GRID-Begrenzung. Danach ruft OpenDisplay() die zugeführte COMPOSER- Funktion mit der CENTER-Kennzeichnung auf. Dadurch wird der Anfangssatz von ZONEs auf dem GRID gemäß der vorstehenden Beschreibung aufgebaut. Schließlich ruft OpenDisplay() die Funktioqn NewScreen() im MOVER-Modul auf. Newscreen() stellt ein Aktualisierungsrechteck so ein, daß es das gesamte GRID bedeckt. Danach ruft Newscreen() den Filler() auf, der ein Matrixfeld von BLT_DESCRIPTORs auf der Grundlage der zugeführten ZONEs des GRID ausfüllt, und ruft den Roller() auf, der die Zoom-BLTs aufruft, wodurch der neue Anzeigepuffer aktualisiert wird. Anschließend ruft NewScreen() VidSetOrigin() auf, um die Anzeigeauffrischung zum neuen Anzeigepuffer zu schalten, und der initialisierte Bildschirm erscheint für den Benutzer.
- Die so dargestellte Seitenanzeige sieht genauso aus, als hätte der Benutzer diese Seitenposition durch Verschieben und Rollen in der speziellen Betriebsart erreicht und nicht z. B. durch Positionieren des Cursors der Übersichtsbetriebsart über der speziellen Seitenposition und anschließendes Umschalten der Betriebsarten. Diese präzise Initialisierung ist nur möglich, indem eine zustandsunabhängige Abbildung von Seitenmerkmalen zur Anzeige aufgebaut wird (über die ZONEs implementiert), sowie durch prazise Koordinatenumwandlung und -heftung (über das Gitterungs- und Abschneideverfahren implementiert).
- Sobald eine Anzeigebetriebsart initialisiert wurde, ist der ZONE-Aufbau durch den COMPOSER einfach und mechanisch. Zum Aufbau von ZONEs wird der nichste PAGE_DESCRIPTOR der entsprechenden Ebene ermittelt (diese werden durch den Formatanalysator in Lesereihenfolge sortiert), und die entsprechenden Felder werden zugewiesen. Ein neuer Gitterversatz der ZONE wird mit Hilfe des Gitterversatzes der angrenzenden ZONE und den Ausrichtfeldern sowie betriebsartenspezifischen Positionierungsregeln festgestellt.
- Das CURSOR-Modul 160 in der Verwaltungsschicht zur Anzeigeaktualisierung implementiert die notwendigen Funktionen zum Darstellen von Cursors vom Typ EXPLICIT (d. h., sichtbaren) für den Benutzer. Zu solchen Funktionen gehören ShowCursor(), HideCursor(), PositionCursor() und UpdateCursor(). Die Implementierung dieser Funktionen ist einfach mit Ausnahme dessen, daß ein sehr großer Block-Cursor zur inversen Bildschirmdarstellung vorgesehen ist, der flimmerfrei bewegt werden kann. Im folgenden ist das Verfahren zur Erzeugung dieses Cursortyps beschrieben.
- Vorzugsweise sieht die digitale Dokumentenvergrößerungsvorrichtung einen großen Block-Cursor zur inversen Bildschirmdarstellung für verschiedene Bildschirme auf der Anzeige vor (z. B. für den OVERVIEW- und MENU-Bildschirm). Nach grafischen Standards ist die Cursorgröße ungewöhnlich groß, um eine klare Sichtbarkeit durch sehgeschädigte Betrachter zu gewährleisten. Der Cursor ist vom Typ "Exklusiv-ODER" (d. h., die Anzeige hinter dem Cursor ist in inverser Bildschirmdarstellung "durchscheinend", so daß die große Größe den Bildschirminhalt nicht unsichtbar macht). Obwohl der Exklusiv- ODER-Cursor von sich aus schnell ist (da der Bildschirminhalt zur Wiederherstellung nicht gesichert zu werden braucht), erfordert die große Cursorgröße spezielle Techniken zum flimmerfreien Bewegen des Cursors. In der Praxis wird der Cursor üblicherweise für jedes Vollbild während der Cursorbewegung vollständig entfernt und neu gezeichnet. Mit dem Prozessor TMS34010 der bevorzugten Ausführungsform kann der große Cursor jedoch nicht in einem Vollbild entfernt und wiederhergestellt werden.
- Die digitale Dokumentenvergrößerungsvorrichtung der Erfindung verwendet eine rationellere Technik der Cursorbewegung, um eine flimmerfreie Cursorbewegung zu gewährleisten. Der Cursor wird durch ein Rechteck im Anzeigepuffer-Koordinatensystem definiert, das erfordert, daß Cursoraktualisierungen die Doppeirundheit des Anzeigepuffers bewältigen. Die Cursorbewegung ist so definiert, daß sie Bewegungen sowohl am Ursprung als auch an den Begrenzungen (d. h., Größenänderungen) dieses Rechtecks aufweist.
- Bei jeder Bewegung des Cursors wird die neue Cursorposition (ein erstes Rechteck) mit der vorherigen Cursorposition (ein zweites Rechteck) verglichen. Nur nichtüberlappende Flächen der beiden Rechtecke werden in einem gegebenen Vollbild aktualisiert. Verlassene Flächen (die nur vom alten Cursor bedeckt sind) werden wieder hergestellt, während von der neuen Cursorposition bedeckte Flächen invers dargestellt werden. Da Vollbilder in Intervallen von 16,6 ms (Frequenz 60 Hz) auftreten, müssen selbst bei schneller Cursorbewegung über den Bildschirm nur kleine Flächen für jedes Vollbild aktualisiert werden. Dadurch werden die Verarbeitungsanforderungen zum Bewegen eines sehr großen Cursors (60 x 40 Bildpunkte) mit jenen vergleichbar, die zum Bewegen kleiner Cursors (12 x 8 Bildpunkte) mit herkömmlichen Einrichtungen notwendig sind.
- Das ROLLER-Modul 162 des DDM-Anzeigeteilsystems weist die Funktion Rollblt() im ROLLER-Modul 162 auf. Rollblt() verbirgt die erforderlichen Operationen zum Umwandeln des logischen Anzeigeraums im ROLLBUF in den physikalischen Speicherraum im Anzeigepunktraster für BLTs, schwarze Maskierungsfüllungen, Cursorfüllungen usw.
- Der Rollblt()-Funktion werden das auf der FILLER-Ebene aufgebaute Matrixfeld von BLT_DESCRIPTOR_Strukturen, ein Zeiger auf den ROLLBUF und ein Zeiger auf das zu aktualisierende GRID zugeführt. Rollblt() verarbeitet die BLT_DESCRIPTORs zu zoomnblt_Parameterblöcken (ZBLT_PARAMs), die zu den entsprechenden Assemblersprachfunktiqnen für Schablonenzoom-BLTs geführt werden.
- Rollblt() wird zum Zugreifen auf das Anzeigepunktraster für alle Operationen verwendet&sub1; die zum Anzeigepunktraster schreiben. Zu diesen Operationen gehören die eindimensionale Schablonenverkleinerungs- und Vergrößerungsfunktionen zum nächsten Nachbarn (Rednn(), Zoomnn()), die zweidirnensionale geglättete Schablonenvergrößerung (Zoomtmpl()), alle Fülloperationen mit den FILL-Befehlen des TMS34010 (über die Fillrect()-Funktion) sowie PIXBLT-Operationen ohne Zoom mit dem PIXBLT-Befehl des Prozessors TMS34010 (über die Bltrect()- Funktion).
- Jede der vorgenannten Operationen kann durch einen BLT _-DESCRIPTOR über das Typfeld bestimmt werden. Nicht alle BLT_DESCRIPTOR-Felder werden von allen Typen- verwendet. Für jene Typen, die ohne Skalierung arbeiten (die Operationen FILL und PIXBLT des 34010), ist der zu Rollblt() geführte GRID-Zeiger ein Zeiger auf den ROLLBUF-Ab guß zum GRID-Datentyp. Dadurch wird automatisch-die Durchführung solcher Operationen am "Eins-Gitter" bewirkt, bei denen der Skalierungsfaktor Eins und der grid_origin der buffer_origin ist.
- Für jeden BLT_DESCRIPTOR im zugeführten Matrixfeld übersetzt Rollblt() zunächst das Rechteck des Abschneidefensters (win) in Anzeigepufferkoordinaten unter Verwendung des grid _org-Felds des GRID. Da die win-Koordinaten im Anzeigeraum durch den Filler() berechnet wurden (d. h., äls Koordinaten relativ zum Bildschirmursprung), plaziert eine Übersetzung durch den grid_origin die Fensterkoordinaten relativ zum Ursprung des Anzeigepunktrasters. Wie vorstehend erwähnt ist, bewegt sich außerdem der Bildschirmursprung gegenüber dem Ursprung des Anzeigepunktrasters, während der logisch ringförmige Puffer am Bildschirm entlang "rotiert" wird.
- Die übersetzten win-Rechteckkoordinaten werden in die Abschneidefelder eines ZBLT_PARAM-Blocks plaziert. Danach werden diese Koordinaten geprüft, um zu bestimmen, ob der angeforderte PIXBLT oder die Füllung um eine Kante des physikalischen Anzeigepunktrasters als Folge der Verwendung dieses Speichers zum Aufbau eines Ringpuffers umläuft. Nur die x-Ordinate der Abschneidekoordinaten muß geprüft werden. Die y- Komponente des Pufferumlaufs wird durch die vorstehend beschriebene Adreß-Aliaserzeugung des Anzeigepunktrasters bereitgestellt. Ferner wird das Abschneiderechteck und nicht das Quellrechteck geprüft, da jeder Abschnitt des PIXBLT, der abgeschnitten wird, nicht zum Anzeigepunktraster geschrieben wird.
- Wird festgestellt, daß das Abschneiderechteck eine Pufferkante schneidet, wird die BLT in zwei Stücke aufgeteilt, die um die Anzeigepufferbegrenzung verschoben sind. Eine Pufferkante kann eine BLT an jedem Punkt schneiden, da die Ausrichtung nur gewährleistet werden kann, wenn die Begrenzung des Anzeigepunktrasters ein Vielfaches von dest_cnt ist (d. h., auf einem Gitterschnittpunkt liegt). Da die Anzeigepunktrasterbegrenzung der DDM mit 1024 Bildpunkten festgelegt ist, führen die meisten ZOOM-Einstellungen zu einer nicht ausgerichteten Punktrasterbegrenzung.
- Abschneiden wird im Falle einer aufgeteilten BLT verwendet, um zu gewährleisten, daß die beiden resultierenden PIXBLTs Kanten haben, die genau zu den Kanten des Anzeigepunktrasters ausgerichtet sind. Dies erfolgt einfach, indem die Entfernung von der Oberseite des ursprünglichen BLT_ DESCRIPTOR-Fensters zur Kante des Anzeigepunktrasters gewonnen wird und zwei ZBLT_PARAM-Blöcke mit entsprechend eingestellten Abschneidefeldern erzeugt werden.
- Die vorgenannte Verarbeitung ist zum Aufteilen von Operationen des Typs FILL ausreichend. BLTs erfordern Informationen zusätzlich zum Fensterfeld, zu denen der Zielpunkt und das Quellrechteck gehören. Das Quellrechteck und der BLT_ DESCRIPTOR müssen ebenfalls in zwei Stücke entsprechend den BLT-Abschnitten aufgeteilt werden, die um die Kante des Anzeigepunktrasters umlaufen bzw. nicht umlaufen. Wird das Abschneiden zum Definieren der Aufteilungsseiten der beiden BLTs benötigt (bei nicht ausgerichteten Kanten des Anzeigepunktrasters), müssen sich die Quellrechtecke um ein src_cnt überlappen, um die richtige Gitterausrichtung zu wahren. Die Gitterausrichtung von Quellbereichen muß beibehalten werden, um das Ordnungsgemäße Aneinanderheften von Bildern an der Kante des Anzeigepunktrasters zu gewährleisten.
- Die notwendigen Berechnungen zum Aufteilen des Quellrechtecks erfolgen ohne Rückübersetzung des Quellrechtecks in den Gitterraum, da dies eine Ermittlung der ZONE erfordert, die dem Quellrechteck entspricht, um den grid_offset der ZONE zu erhalten. Anstelle dessen wird der Anzeigepunkt in den Quellraum umgewandelt, da dieser Punkt exakt dem Ursprung des Quellrechtecks im Gitterraum entspricht.
- Ferner erfordert die Entfernung zwischen der oberen und unteren Ecke des Quellrechtecks plus eins, die Quellrechteckbegrenzung, keine Übersetzung. Unter Verwendung dieser Koordinatenumwandlungen werden die Felder source_start und source_extent des ZBLT_PARAM-Blocks für die beiden (aufgeteilten) PIXBLTs so berechnet, daß die resultierenden Quellbereiche im Gitterraum gitterausgerichtet bleiben.
- Nach Durchführung der Pufferkantenberechnungen und nachdem eine bedarfsweise Aufteilung erfolgte, prüft Rollblt() das BLT_DESCRIPTOR-Typfeld und ruft die jeweilige PIXBLT- oder FILL-Funktion entsprechend auf. Die ein- und zweidimensionalen Schablonenzoomfunktionen akzeptieren zwei Parameter, den ZBLT_PARAM-Blockzeiger sowie einen Zeiger auf die ZOOM _-SETTING, die dem gerade aktualisierten GRID beigefügt ist. Die ZOOM_SETTING sieht einen Zeiger auf die Zoom-Nachschlagetabelle und andere erforderliche Steuerinformationen vor. Den Operationen ohne Zoom werden der Parameterblockzeiger und zusätzlich ein Operationsparameter zur Bildpunktverarbeitung (PPOP) zugeführt, der zum Einstellen der Grafikumgebung für die durch den TMS34010 implementierten BLTs und FILLs dient.
- Der Bildschirm in der OVERVIEW-Anzeigebetriebsart wird von der wirklichen Breite des abgetasteten Seitenbilds ausgefüllt. Dies wird durch Verwenden der vom Formatanalysator zurückgeführten MARGIN-Informationen erreicht. Die Größe des MARGIN-Rechtecks wird mit der Größe des Anzeigebildschirms verglichen, um ein Zoomverhältnis zu erhalten, das das Seitenbild so verkleinert, daß es genau auf den OVERVIEW-Anzeigebildschirm paßt. Anschließend wird die inkrementale Zoomfunktion zum Verkleinern des Seitenbilds zum Anzeigepuffer verwendet.
- Somit ist eine digitale Dokumentenvergrößerungsvorrichtung vorgesehen, die gedruckte Informationen abtastet und digitalisiert, die Informationen verarbeitet und die verarbeiteten Informationen zu einem Anzeigebildschirm ausgibt. Der Fachmann wird erkennen, daß die Erfindung mit anderen als den beschriebenen Ausführungsformen praktisch verwirklicht werden kann, die hier lediglich zur Veranschaulichung und nicht zur Einschränkung dargestellt sind, und die Erfindung ist nur durch die nachfolgenden Ansprüche beschränkt.
Claims (12)
1. Digitales Vergrößerungssystem der Klasse, bei der ein
digitalisiertes Bild, das einem gedruckten Dokument
entspricht, in einem Speicher (14) gespeichert und durch
einen Formatanalysator analysiert wird, um Bereiche
innerhalb des gedruckten Bilds zu definieren, die
einzelne Textzeilen einschließen, wobei jede Textzeile
einen Anfang und ein Ende hat, und die Textzeilen auf
einem Monitor (16) angezeigt werden, wobei die digitale
Dokumentenvergrößerungsvorrichtung aufweist:
einen Anzeigepuffer (15) zum Speichern von digitalen
Daten als Darstellung der Textzeilen, so daß das Ende
jeder Textzeile innerhalb des Anzeigepuffers (15)
benachbart zu dem Anfang einer weiteren Textzeile gespeichert
wird; und
eine Einrichtung zum automatischen Anzeigen eines
Abschnitts der digitalen Daten innerhalb des
Anzeigepuffers (15), der den Textzeilen entspricht, auf dem
Monitor (16), wobei der Anfang jeder Textzeile auf dem
Monitor (16) benachbart zu dem Ende einer zuvor angezeigten
Textzeile angezeigt wird.
2. Digitales Vergrößerungssystem nach Anspruch 1, dadurch
gekennzeichnet, daß die Einrichtung zum automatischen
Anzeigen der digitalen Daten die auf dem Monitor (16)
angezeigten digitalen Daten horizontal so inkrementiert,
daß die Textzeilen verschoben werden.
3. Digitales Vergrößerungssystem nach Anspruch 2, dadurch
gekennzeichnet, daß die Einrichtung zum automatischen
Anzeigen der digitalen Daten digitale Daten entsprechend
vorhergehenden und nachfolgenden Textspalten anzeigt.
4. Digitales Vergrößerungssystem nach Anspruch 1, dadurch
gekennzeichnet, daß die Einrichtung zum automatischen
Anzeigen der digitalen Daten digitale Daten entsprechend
vorhergehenden und nachfolgenden Textspalten anzeigt.
5. Digitales Vergrößerungssystem nach Anspruch 1, dadurch
gekennzeichnet, daß die Einrichtung zum automatischen
Anzeigen der digitalen Daten ferner auf dem Monitor
Polygonblenden anzeigt, die alles außer dem Text
maskieren.
6. Digitales Vergrößerungssystem nach Anspruch 1, dadurch
gekennzeichnet, daß die Einrichtung zum automatischen
Anzeigen der digitalen Daten ferner eine vergrößerte
Version der Textzeilen auf dem Monitor anzeigt.
7. Digitales Vergrößerungssystem nach Anspruch 6, dadurch
gekennzeichnet, daß die Einrichtung zum automatischen
Anzeigen der digitalen Daten die Textzeilen mit einer
auswählbaren Vergrößerung anzeigt.
8. Digitales Vergrößerungssystem nach Anspruch 7, dadurch
gekennzeichnet, daß die Einrichtung zum automatischen
Anzeigen der digitalen Daten die Textzeilen mit einer
Vergrößerung anzeigt, die aus einer vorbestimmten Menge
von Zoomwerten ausgewählt wird, die sich einer Menge von
Vergrößerungen in Potenzreihe annähern.
9. Digitales Vergrößerungssystem nach Anspruch 1, dadurch
gekennzeichnet, daß die Einrichtung zum automatischen
Anzeigen der digitalen Daten die Textzeilen mit einer
auswählbaren Geschwindigkeit anzeigt.
10. Digitales Vergrößerungssystem nach Anspruch 1, ferner
gekennzeichnet durch eine Schräglaufeliminiereinrichtung
zum Beseitigen eines Schräglaufs in den Textzeilen,
bevor
die Einrichtung zum automatischen Anzeigen der
digitalen Daten die Textzeilen anzeigt.
11. Digitales Vergrößerungssystem nach Anspruch 1, dadurch
gekennzeichnet, daß die Einrichtung zum automatischen
Anzeigen der digitalen Daten ferner automatisch die
vergrößerte Version der Textzeilen rollt, indem die
Textzeilen übereinander mit aufeinanderfolgenden vertikalen
Inkrementen auf dem Monitor angezeigt werden.
12. Digitales Vergrßerungssystem nach Anspruch 1, ferner
gekennzeichnet durch eine Reihe von in dem Speicher
gespeicherten Schablonen, die durch die Einrichtung zum
automatischen Anzeigen der digitalen Daten aufgerufen
werden, um digitale Daten zu dem Anzeigepuffer (15) zu
führen, die eine geglättete vergrößerte Version der
Textzeilen darstellen.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US69163191A | 1991-04-24 | 1991-04-24 | |
PCT/US1992/003223 WO1992020033A1 (en) | 1991-04-24 | 1992-04-20 | Digital document magnifier |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69206796D1 DE69206796D1 (de) | 1996-01-25 |
DE69206796T2 true DE69206796T2 (de) | 1997-02-13 |
Family
ID=24777316
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69206796T Expired - Fee Related DE69206796T2 (de) | 1991-04-24 | 1992-04-20 | Digitale dokumentenvergroesserungsvorrichtung |
Country Status (7)
Country | Link |
---|---|
US (1) | US5586196A (de) |
EP (1) | EP0583411B1 (de) |
JP (1) | JPH06507256A (de) |
AU (1) | AU656401B2 (de) |
DE (1) | DE69206796T2 (de) |
ES (1) | ES2083178T3 (de) |
WO (1) | WO1992020033A1 (de) |
Families Citing this family (62)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5819110A (en) | 1995-06-05 | 1998-10-06 | Ricoh Company, Ltd. | System for determining whether connection or connectionless modes of communication should be used to transmit information between devices in accordance with priorities of events |
US5960448A (en) * | 1995-12-15 | 1999-09-28 | Legal Video Services Inc. | System and method for displaying a graphically enhanced view of a region of a document image in which the enhanced view is correlated with text derived from the document image |
US6104834A (en) * | 1996-08-01 | 2000-08-15 | Ricoh Company Limited | Matching CCITT compressed document images |
US5841905A (en) * | 1996-10-25 | 1998-11-24 | Eastman Kodak Company | Business form image identification using projected profiles of graphical lines and text string lines |
US6147670A (en) | 1997-03-13 | 2000-11-14 | Phone.Com, Inc. | Method of displaying elements having a width greater than a screen display width |
US6076731A (en) * | 1997-04-10 | 2000-06-20 | Intermec Ip Corp. | Magnetic stripe reader with signature scanner |
US6078306A (en) * | 1997-10-21 | 2000-06-20 | Phoenix Technologies Ltd. | Basic input-output system (BIOS) read-only memory (ROM) with capability for vertical scrolling of bitmapped graphic text by columns |
JP4215844B2 (ja) * | 1997-11-05 | 2009-01-28 | 日本テキサス・インスツルメンツ株式会社 | 半導体記憶装置 |
US6252576B1 (en) * | 1998-08-06 | 2001-06-26 | In-System Design, Inc. | Hardware-efficient system for hybrid-bilinear image scaling |
US6370518B1 (en) * | 1998-10-05 | 2002-04-09 | Openwave Systems Inc. | Method and apparatus for displaying a record from a structured database with minimum keystrokes |
US7233619B1 (en) * | 1998-12-21 | 2007-06-19 | Roman Kendyl A | Variable general purpose compression for video images (ZLN) |
US8290034B2 (en) * | 1998-12-21 | 2012-10-16 | Zin Stai Pte. In, Llc | Video transmission and display including bit-wise sub-sampling video compression |
WO2000060532A1 (en) * | 1999-04-01 | 2000-10-12 | University Of Maryland Baltimore County | Method and apparatus for restoration of low resolution images |
US6731326B1 (en) * | 1999-04-06 | 2004-05-04 | Innoventions, Inc. | Low vision panning and zooming device |
US7885868B2 (en) * | 1999-12-20 | 2011-02-08 | Jacques Nault | Reading, organizing and manipulating accounting data |
US7139729B2 (en) * | 1999-12-20 | 2006-11-21 | Jacques Nault | Financial statement module |
US6781717B1 (en) * | 1999-12-30 | 2004-08-24 | Texas Instruments Incorporated | Threshold screening using range reduction |
US6609161B1 (en) | 2000-06-01 | 2003-08-19 | Adaptec, Inc. | Two-dimensional execution queue for host adapters |
US6789134B1 (en) * | 2000-06-01 | 2004-09-07 | Adaptec, Inc. | Dequeuing from a host adapter two-dimensional queue |
US6718336B1 (en) * | 2000-09-29 | 2004-04-06 | Battelle Memorial Institute | Data import system for data analysis system |
US20020120653A1 (en) * | 2001-02-27 | 2002-08-29 | International Business Machines Corporation | Resizing text contained in an image |
US7437670B2 (en) | 2001-03-29 | 2008-10-14 | International Business Machines Corporation | Magnifying the text of a link while still retaining browser function in the magnified display |
US20020143817A1 (en) * | 2001-03-29 | 2002-10-03 | International Business Machines Corporation | Presentation of salient features in a page to a visually impaired user |
US7284700B1 (en) * | 2003-06-19 | 2007-10-23 | Populex Corp. | Advanced voting system and method |
GB2383145B (en) * | 2001-10-31 | 2005-09-07 | Alphamosaic Ltd | Data access in a processor |
US20040021890A1 (en) * | 2002-03-25 | 2004-02-05 | Takumi Hirai | Image forming apparatus, information processing apparatus and the authentication method |
US20040036663A1 (en) * | 2002-03-29 | 2004-02-26 | Bevers David R. | System and method for an image reader with electronic travel |
AUPS300502A0 (en) * | 2002-06-17 | 2002-07-11 | Canon Kabushiki Kaisha | Generating one or more linear blends |
US7254270B2 (en) * | 2002-07-09 | 2007-08-07 | Hewlett-Packard Development Company, L.P. | System and method for bounding and classifying regions within a graphical image |
US7212318B2 (en) * | 2002-11-26 | 2007-05-01 | Pamela Bradbery | Apparatus and method for an enhanced reading device with automatic line registration |
US7184028B2 (en) * | 2003-01-03 | 2007-02-27 | Kabushiki Kaisha Toshiba | Switchable LCD touchscreen panel scan module |
US20040191731A1 (en) * | 2003-03-31 | 2004-09-30 | Stork David G. | Paper document-based assistive technologies for the visually impaired |
US9165478B2 (en) | 2003-04-18 | 2015-10-20 | International Business Machines Corporation | System and method to enable blind people to have access to information printed on a physical document |
US7667815B2 (en) * | 2003-08-27 | 2010-02-23 | Ming Su | Multi-panel monitor displaying systems |
JP4677245B2 (ja) * | 2004-03-03 | 2011-04-27 | キヤノン株式会社 | 画像表示方法、プログラム、画像表示装置及び画像表示システム |
US7641108B2 (en) * | 2004-04-02 | 2010-01-05 | K-Nfb Reading Technology, Inc. | Device and method to assist user in conducting a transaction with a machine |
US7325735B2 (en) * | 2004-04-02 | 2008-02-05 | K-Nfb Reading Technology, Inc. | Directed reading mode for portable reading machine |
JP2005323044A (ja) * | 2004-05-07 | 2005-11-17 | Uniden Corp | 画像送信装置及び画像受信装置 |
US7483592B2 (en) * | 2005-01-06 | 2009-01-27 | Algorithmic Implementatins, Inc., Dba Ai Squared | Method and apparatus for magnifying computer screen display |
JP4900640B2 (ja) * | 2005-03-30 | 2012-03-21 | 京セラ株式会社 | 携帯端末装置およびその文書表示制御方法 |
JP5063866B2 (ja) * | 2005-04-14 | 2012-10-31 | オリンパスメディカルシステムズ株式会社 | 画像表示装置 |
US7623710B2 (en) * | 2006-02-14 | 2009-11-24 | Microsoft Corporation | Document content and structure conversion |
JP2008041003A (ja) * | 2006-08-10 | 2008-02-21 | Fuji Xerox Co Ltd | 文書表示処理装置および文書表示処理プログラム |
CN101197044B (zh) * | 2006-12-06 | 2011-02-02 | 鸿富锦精密工业(深圳)有限公司 | 图像合成***及方法 |
US8001483B2 (en) * | 2007-02-13 | 2011-08-16 | Microsoft Corporation | Selective display of cursor |
US8269890B2 (en) * | 2007-05-15 | 2012-09-18 | E-Image Data Corporation | Digital microform imaging apparatus |
US20080288888A1 (en) * | 2007-05-15 | 2008-11-20 | E-Image Data Corporation | Computer User Interface for a Digital Microform Imaging Apparatus |
US7980480B2 (en) * | 2007-09-21 | 2011-07-19 | Silverbrook Research Pty Ltd | Method of imaging a coding pattern having registration symbols |
JP2009301206A (ja) * | 2008-06-11 | 2009-12-24 | Fuji Xerox Co Ltd | 情報表示装置及びプログラム |
US8074181B2 (en) * | 2008-09-15 | 2011-12-06 | Microsoft Corporation | Screen magnifier panning model with dynamically resizable panning regions |
US8345012B2 (en) * | 2008-10-02 | 2013-01-01 | Utc Fire & Security Americas Corporation, Inc. | Method and interface device for operating a security system |
US20110161871A1 (en) * | 2009-07-02 | 2011-06-30 | Freedom Scientific, Inc. | Magnification Interface with Independent Pointer Sizing |
US20110010611A1 (en) * | 2009-07-08 | 2011-01-13 | Richard Ross | Automated sequential magnification of words on an electronic media reader |
KR101635508B1 (ko) * | 2009-08-28 | 2016-07-04 | 삼성전자주식회사 | 컨텐트 제공 방법 및 장치 |
BE1018568A3 (nl) * | 2009-09-04 | 2011-03-01 | Koba Vision | Voorleestoestel en werkwijze van voorlezen. |
US8150215B2 (en) * | 2010-03-24 | 2012-04-03 | Altek Corporation | Routable image pipeline device |
US8385659B2 (en) | 2010-04-08 | 2013-02-26 | Brady Duga | System for and method of displaying non-rectangular images in electronic content on a reader device |
US9158983B2 (en) | 2010-07-08 | 2015-10-13 | E-Image Data Corporation | Microform word search method and apparatus |
JP5639436B2 (ja) | 2010-10-18 | 2014-12-10 | 株式会社メガチップス | 画像処理装置、および画像処理装置の動作方法 |
US9171203B2 (en) | 2013-09-10 | 2015-10-27 | Dropbox, Inc. | Scanbox |
JP6893209B2 (ja) | 2015-10-30 | 2021-06-23 | アクシオム コーポレーション | 構造化されたマルチフィールドファイルのレイアウトの自動解釈 |
US9483718B1 (en) | 2015-12-14 | 2016-11-01 | International Business Machines Corporation | Encoding and decoding data in two-dimensional symbology |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3976980A (en) * | 1969-01-09 | 1976-08-24 | Rockwell International Corporation | Data reordering system |
US3924244A (en) * | 1970-12-30 | 1975-12-02 | Morat Gmbh Franz | System for the electronic control of textile machines or for the manufacture of control strips for textile machines |
US3848234A (en) * | 1973-04-04 | 1974-11-12 | Sperry Rand Corp | Multi-processor system with multiple cache memories |
FR2261694A5 (de) * | 1973-09-05 | 1975-09-12 | Honeywell Bull Soc Ind | |
GB2070399B (en) * | 1980-02-27 | 1983-10-05 | Xtrak Corp | Real time toroidal pan |
JPS5758463A (en) * | 1980-09-26 | 1982-04-08 | Canon Inc | Picture pattern converter |
US4549275A (en) * | 1983-07-01 | 1985-10-22 | Cadtrak Corporation | Graphics data handling system for CAD workstation |
US5289569A (en) * | 1985-05-21 | 1994-02-22 | Canon Kabushiki Kaisha | Document processing system capable of simultaneously displaying two continuous document pages in accordance with a selected binding position |
JPS62168270A (ja) * | 1986-01-20 | 1987-07-24 | Nippon Kogaku Kk <Nikon> | パタ−ン変更装置 |
US4829453A (en) * | 1987-03-05 | 1989-05-09 | Sharp Kabushiki Kaisha | Apparatus for cataloging and retrieving image data |
US5179648A (en) * | 1986-03-24 | 1993-01-12 | Hauck Lane T | Computer auxiliary viewing system |
JPS62257524A (ja) * | 1986-04-30 | 1987-11-10 | Toshiba Corp | 表示文字出力制御装置 |
JPS63109591A (ja) * | 1986-10-27 | 1988-05-14 | Sharp Corp | 光学的文字読取装置 |
CA1258912A (en) * | 1986-11-20 | 1989-08-29 | Stephen J. King | Interactive real-time video processor with zoom, pan and scroll capability |
US4918526A (en) * | 1987-03-20 | 1990-04-17 | Digital Equipment Corporation | Apparatus and method for video signal image processing under control of a data processing system |
US4774581A (en) * | 1987-04-14 | 1988-09-27 | Rca Licensing Corporation | Television picture zoom system |
JP2506120B2 (ja) * | 1987-09-16 | 1996-06-12 | 株式会社日立製作所 | 画像表示方法 |
US4821086A (en) * | 1987-10-28 | 1989-04-11 | Rca Licensing Corporation | TV receiver having in-memory switching signal |
GB2213345B (en) * | 1987-12-28 | 1992-01-15 | Mitsubishi Electric Corp | Image data filing system |
US5038138A (en) * | 1989-04-17 | 1991-08-06 | International Business Machines Corporation | Display with enhanced scrolling capabilities |
US5053761A (en) * | 1989-06-16 | 1991-10-01 | International Business Machines | Method for smooth bitmap scrolling |
US5075673A (en) * | 1989-06-16 | 1991-12-24 | International Business Machines Corp. | Variable speed, image pan method and apparatus |
JPH0359778A (ja) * | 1989-07-28 | 1991-03-14 | Toshiba Corp | 画像処理装置 |
US5058038A (en) * | 1989-12-13 | 1991-10-15 | Ricoh Corporation | Method to connect wide size scanner to laser printer engine for copying with size reduction |
US5130794A (en) * | 1990-03-29 | 1992-07-14 | Ritchey Kurtis J | Panoramic display system |
-
1992
- 1992-04-20 WO PCT/US1992/003223 patent/WO1992020033A1/en active IP Right Grant
- 1992-04-20 JP JP4511869A patent/JPH06507256A/ja active Pending
- 1992-04-20 ES ES92913332T patent/ES2083178T3/es not_active Expired - Lifetime
- 1992-04-20 EP EP92913332A patent/EP0583411B1/de not_active Expired - Lifetime
- 1992-04-20 DE DE69206796T patent/DE69206796T2/de not_active Expired - Fee Related
- 1992-04-20 AU AU21682/92A patent/AU656401B2/en not_active Ceased
-
1994
- 1994-01-31 US US08/190,236 patent/US5586196A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
WO1992020033A1 (en) | 1992-11-12 |
AU656401B2 (en) | 1995-02-02 |
EP0583411B1 (de) | 1995-12-13 |
EP0583411A1 (de) | 1994-02-23 |
ES2083178T3 (es) | 1996-04-01 |
DE69206796D1 (de) | 1996-01-25 |
AU2168292A (en) | 1992-12-21 |
US5586196A (en) | 1996-12-17 |
JPH06507256A (ja) | 1994-08-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69206796T2 (de) | Digitale dokumentenvergroesserungsvorrichtung | |
DE69428323T2 (de) | Ein Bildanzeigevorrichtung | |
DE69428491T2 (de) | Bildlinse | |
DE69131370T2 (de) | Pipelinestrukturen für vollfarbfähigen Rechnergraphik | |
DE69432579T2 (de) | Verfahren und Vorrichtung zum Bearbeiten von Modell-Datenstrukturen eines Bildes, um ein für Menschen erkennbares Resultat zu erreichen | |
DE3485765T2 (de) | Anzeigesystem fuer zusammengesetzte bilder. | |
DE60109434T2 (de) | Systeme und verfahren zur erzeugung von visuellen darstellungen von graphischen daten | |
DE69221414T2 (de) | Intelligenter Schriftartdarstellungskoprozessor | |
DE3688546T2 (de) | Digitale bildumdrehung. | |
DE69621778T2 (de) | Tiefenabhängige parallaktische pixelverschiebung | |
DE69534331T2 (de) | Verfahren und Vorrichtung zur Hervorhebung der Einzelheit einer Baumstruktur | |
DE69428647T2 (de) | Verfahren und Gerät zur Erzeugung eines zweiten gemischten Bildsignals im räumlichen Kontext eines ersten Bildsignals | |
DE2701891A1 (de) | Rechner-graphik-anzeigesystem | |
DE69413035T2 (de) | Antialiasing-verfahren und -vorrichtung mit automatischer justierung von horizontalen und vertikalen rändern an einem zielgitter | |
DE69917489T2 (de) | Anzeigesystem zur mischung von graphischen daten und videodaten | |
DE69126909T2 (de) | Videosignalanzeigevorrichtung | |
DE3650764T2 (de) | Bildverarbeitungsgerät | |
DE3586927T2 (de) | Flaches bildschirmanzeigesystem mit integriertem eingabegeraet. | |
DE69130848T2 (de) | Aufzeichnung von abrollenden aus Zeichen zusammengesetzten Hintergrundbildern | |
DE69708871T2 (de) | Bildanzeigesysteme | |
DE2620217A1 (de) | Anordnung zur komposition von rasterpunktildinformation | |
DE69529500T2 (de) | Verwendung von abgetasteten Bildern in einem Bildzusammensetzungssystem | |
DE2835689A1 (de) | Anordnung zur veraenderung der aufloesung bei der bild-datenerfassung und -uebertragung | |
DE69230392T2 (de) | Verfahren und Gerät zur Bildverarbeitung | |
DE60120670T2 (de) | Digitale dokumentverarbeitung |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |