-
Die vorliegende Offenbarung betrifft eine Technik zur Verarbeitung einer Zeichenfolge zur graphischen Darstellung an einer Mensch-Maschine-Schnittstelle. Konkret wird ein Computer-implementiertes Verfahren zum Verarbeiten einer Zeichenfolge für eine graphische Darstellung an einer Mensch-Maschine-Schnittstelle angegeben.
-
Hintergrund
-
Vektorgraphik spielt in der graphischen Darstellung zweidimensionaler oder dreidimensionaler Objekte eine immer größere Rolle. Vektorgraphik basiert auf einer mathematischen Beschreibung der darzustellenden Objekte, anstatt einer Angabe von Farbwerten für jeden darzustellenden Bildpunkt des Objektes, wie es bei Rastergraphik üblich ist. Die Art der graphischen Darstellung von Objekten (z.B. Füllung, Linienstärke, usw.) wird bei Vektorgraphik mittels den Objekten zuordenbaren Attributen festgelegt. So kann beispielsweise das Objekt „Kreis“ lediglich durch Festlegen eines Kreismittelpunktes und eines Kreisradius eindeutig beschrieben werden. Ferner kann über Attributangaben, wie beispielsweise Kontourlinienstärke, Kontourfarbe, Füllfarbe usw., festgelegt werden, wie das Objekt graphisch dargestellt (also „gerendert“) werden soll.
-
Der Vorteil von Vektorgraphik gegenüber Rastergraphik liegt darin, dass graphisch darzustellende Objekte durch einen einfach zu verarbeitenden und vom Umfang her überschaubaren Datensatz beschrieben werden können. Prozessorressourcen und Speicherressourcen werden somit geschont. Vektorgraphik-Objekte sind ferner stufenlos und verlustfrei skalierbar und unabhängig von der Auflösung eines visuellen Ausgabemediums. Vektorgraphik-basierte Objekte können somit noch schneller und mit höherer Qualität dargestellt werden.
-
Vektorgraphik wird zur Realisierung attraktiver Benutzerschnittstellen (Mensch-Maschine-Schnittstellen), zur Realisierung mobiler Entertainment-Anwendungen, für Navigationsanwendungen oder im Bereich des Web Browsings eingesetzt, um nur einige Beispiele zu nennen. Zweidimensionale Vektorgraphik findet aber auch Einsatz zum graphischen Darstellen von Zeichen, Zeichenfolgen oder Texten (auch Text Rendering genannt). Moderne Anwendungen greifen beim Text Rendering auf sogenannte Outline-Fonts zurück. Outline-Fonts beschreiben eine Outline (auch als Umriss oder Kontur bezeichnet) einer Glyphe als Ansammlung komplexer Aufpunktvektoren, die außer auf Geraden und Bögen auch auf Beezier-Kurven und Splines zeigen können. Mit Glyphe ist hierbei das konkrete Erscheinungsbild eines Zeichens gemeint. Beispiele für derartige Outline-Fonts sind der True-Type-Font, oder kurz TTF, diverse PostScript-Fonts oder der OpenType-Font.
-
Es ist zu beachten, dass graphische Darstellungen von Zeichen und Texten großen Einfluss auf die Performance moderner Mensch-Maschine-Schnittstellen haben können. Qualität und Geschwindigkeit von Zeichendarstellungen hängen hierbei stark vom eingesetzten Darstellungsverfahren ab.
-
US 2013/0057554 A1 betrifft Computerschriften, wobei Metadaten einzelne Glyphen und/oder Glyphenkonturen für entsprechende Buchstaben der Schrift beschreiben. Für einzelne Zeichen wird nach gemeinsamen Konturen gesucht, und in dem Zeichen nur eine Referenz zu solchen gemeinsamen Glyphen gespeichert. Dadurch kann der Speicherbedarf einer Schrift reduziert werden, da redundante Konturen nicht mehrfach abgespeichert werden.
-
US 2010/0238178 A1 betrifft ein computer-implementiertes Verfahren zum Verarbeiten von Zeichen. Dabei werden zusammengesetzte Zeichen aus Glyphen einzelner Zeichen kombiniert.
WO 2007/098013 A1 betrifft die Bearbeitung einer zusammengesetzten Zeichenfolge.
-
Kurzer Abriss
-
Der vorliegenden Offenbarung liegt die Aufgabe zugrunde, ein Verfahren anzugeben, welches eine graphische Darstellung von Zeichen oder Zeichenfolgen an Mensch-Maschine-Schnittstellen weiter verbessert.
-
Diese Aufgabe wird mittels der in den unabhängigen Ansprüchen angegebenen Merkmale gelöst.
-
Gemäß einem ersten Aspekt der vorliegenden Erfindung wird ein Computer-implementiertes Verfahren zum Verarbeiten einer Zeichenfolge für eine graphische Darstellung an einer Mensch-Maschine-Schnittstelle bereitgestellt, wobei jedes Zeichen der Zeichenfolge durch eine in einer Font-Bibliothek hinterlegte Glyphe repräsentiert wird und wobei die einem jeden Zeichen zugeordnete Glyphe wenigstens eine Outline für das Zeichen bereitstellt, wobei das Verfahren die folgenden Schritte umfasst: Abrufen wenigstens der Outline für jedes Zeichen der Zeichenfolge aus der Font-Bibliothek; Erzeugen, auf Basis der abgerufenen Outlines, eines einzigen, die Zeichenfolge repräsentierenden Pfad-Objekts, welches wenigstens die Outlines aller Zeichen der Zeichenfolge umfasst; und Übergeben des Pfad-Objekts an eine Graphikschnittstelle zum graphischen Darstellen des Pfad-Objekts.
-
Ein jedes Zeichen kann als Glyphe in der Font-Bibliothek abgespeichert sein. Als Font-Bibliothek kann FreeType (oder auch iType) verwendet werden. Eine Glyphe kann ein konkretes Erscheinungsbild eines Zeichens repräsentieren. Konkret kann eine Glyphe beschreiben, wie ein Zeichen graphisch dargestellt (gerendert) werden soll.
-
Für die graphische Darstellung können Vektorfonts verwendet werden. Konkret können Outline-Fonts verwendet werden, bei denen eine Glyphe wenigstens durch Angabe der Outline der Glyphe beschrieben wird. Die Outline kann die Kontur oder den Umriss einer einem Zeichen zugeordneten Glyphe beschreiben. Die Outline kann mittels Vektordaten mathematisch beschrieben werden. Hierbei kann die Outline durch wenigstens einen geschlossenen (und/oder offenen) Pfad beschrieben werden. Ein Pfad kann eine vektorbasierte (geschlossene und/oder offene) Linie oder Form darstellen. Jeder Pfad kann über eine Serie von Punkten definiert sein, die über Segmente miteinander verbindbar sind. Die Punkte können bezüglich eines zweidimensionalen Koordinatensystems (durch Festlegen von Punktkoordinaten) definiert sein. Die Segmente können Geraden, Bögen, Beezier-Kurven und/oder Splines darstellen.
-
Das erzeugte Pfad-Objekt kann alle Pfade umfassen, welche die Outline aller darzustellenden Zeichen der Zeichenfolge beschreiben. Mit anderen Worten kann das erzeugte Pfad-Objekt alle Outlines der den Zeichen der Zeichenfolge zuordenbaren Glyphen umfassen. Somit kann die darzustellende Zeichenfolge durch ein einziges Pfad-Objekt repräsentiert werden. Es wird somit nicht für jede Glyphe der Zeichenfolge ein separates Pfad-Objekt für die graphische Darstellung erzeugt.
-
Ferner kann das Pfad-Objekt Attributinformation umfassen, welche die visuelle Erscheinung (wie beispielsweise Füllfarbe, Füllmuster, Kontourlinie, Kontourfarbe, usw.) weiter festlegen. Ein Pfad-Objekt kann somit alle Vektordaten umfassen, die zur Beschreibung einer visuellen Erscheinung des darzustellenden Objektes benötigt werden.
-
Da nur ein einziges Pfad-Objekt für die darzustellende Zeichenfolge erzeugt wird, kann auch nur dieses eine Pfad-Objekt an die Graphikschnittstelle zur graphischen Darstellung übergeben werden. Die darzustellende Zeichenfolge kann somit als ein einziges Objekt der Graphikschnittstelle übergeben und weiter verarbeitet werden. Die Graphikschnittstelle kann dann das übergegebene Pfad-Objekte in gewohnter Weise verarbeiten, um aus den Vektor-basierten Graphikdaten des Objektes an einer visuellen Ausgabeeinheit anzeigbare Bilddaten zu erzeugen.
-
Der Schritt des Erzeugens des Pfad-Objektes kann ferner umfassen: Zusammensetzen der abgerufenen Outlines in einer durch die Zeichenfolge vorgegebenen Reihenfolge der Zeichen zu einem einzigen Pfad-Objekt. Der durch die Zeichenfolge vorgegebenen Reihenfolge folgend, können die Zeichen repräsentierenden Outlines derart zusammengesetzt werden, dass der horizontale und/oder vertikale Abstand zwischen benachbarten Outlines einen einstellbaren und/oder gewünschten Zeichenabstand einnimmt.
-
Der Schritt des Erzeugens des Pfad-Objekts kann ein Berechnen einer Translation (einer Positionsverschiebung) der ein Zeichen repräsentierenden Outline(s) relativ zu einer vorgegebenen oder berechneten Position einer Outline für ein vorangehendes Zeichen der Zeichenfolge umfassen. Konkret wird ein Translationsvektor berechnet, welcher angibt, wie stark und in welche Richtung ein jedes Outline-Segment (Pfad-Segment) für ein Zeichen bezüglich der Outline für ein vorangehendes Zeichen verschoben wird. Die Positionen der Outline (oder die Position der die Outline beschreibenden Pfade) können bezüglich eines vorgegebenen relativen oder absoluten Koordinaten-systems festgelegt werden. Der Schritt des Erzeugens eines Pfad-Objektes kann somit ein Neu-Berechnen von Positionen der die Zeichen repräsentierenden Outlines umfassen. Der Schritt des Erzeugens kann ferner ein Kombinieren der neu berechneten Outlines zu einem einzigen Pfad-Objekt umfassen. Das erzeugte Pfad-Objekt kann dann alle neu berechneten Outlines (Pfad-Segmente) der Zeichenfolge umfassen.
-
Die Berechnung der Translation oder des Translationsvektors für die Outline eines jeden Zeichens kann sukzessive auf der Grundlage des jeweils vorangehenden Zeichens (Outline des vorangehenden Zeichens) erfolgen.
-
Die Glyphen können ferner wenigstens Informationen über Höhe, Breite, Offset, Kerning und/oder Koordinatenpunkte (z.B. Startpunkt) für ein Outline bereitstellen. Über die Kerning-Information kann ein Abstand zu anderen Zeichen in Abhängigkeit ihrer graphischen Darstellung festgelegt werden. Diese Information kann beispielsweise genutzt werden, um einen ungewöhnlich großen Abstand zwischen zwei aufeinander folgenden Zeichen oder aber eine Ligatur zu vermeiden. In die Berechnung der Translation der Outline eines Zeichens kann wenigstens eine dieser Informationen berücksichtigt werden. Beispielsweise kann die Breite einer Outline eines vorangehenden Zeichens berücksichtigt werden um eine horizontale Translation eines nachfolgenden Zeichens bezüglich des vorangehenden Zeichens zu berechnen. Genauso kann eine Höhe eines Zeichens in die Berechnung einer vertikalen Translation eines dem Zeichen in vertikaler Richtung nachfolgenden Zeichens einfließen. Oder aber es können Höhe und Breite in die Berechnung einer Translation gemeinsam einfließen, um eine entsprechende Positionsverschiebung in horizontaler und vertikaler Richtung eines Zeichens bezüglich eines vorangehenden Zeichens zu erzeugen.
-
Die auf der Grundlage von Höhe, Breite, Offset, Kerning und Koordinatenposition der Outline der einzelnen Glyphen berechnete Translation kann eindimensional oder zweidimensional sein. Eindimensionale Translation kann bedeuten, dass die Outline einer Glyphe bezüglich der Outline einer vorangehenden Glyphe nur in eine Richtung (entweder horizontal oder vertikal) verschoben wird. Zweidimensionale Translation kann bedeuten, dass die Outline einer Glyphe bezüglich der Outline einer vorangehenden Glyphe sowohl in horizontaler als auch in vertikaler Richtung verschoben wird.
-
Das Verfahren kann ferner den Schritt des Bereitstellens eines einheitlichen Satzes von Attributen für das Pfad-Objekt umfassen. Der bereitgestellte Satz von Attributen kann somit einheitlich (also zentral) die visuelle Darstellung aller Zeichen der Zeichenfolge im Detail festlegen. Alternativ hierzu kann das Pfad-Objekt auch mit mehreren Attribut-Sätzen versehen werden, um die visuelle Darstellung einzelner Zeichen der Zeichenfolge separat festzulegen.
-
Zusätzlich oder alternativ hierzu kann das Verfahren ferner ein Bereitstellen von Pattern- oder Gradienten-Informationen für das Pfad-Objekt umfassen. Über die Pattern-Information kann ein Füll-Muster festgelegt werden, mit dem ein Zeichen dargestellt werden soll. Über die Gradienten-Information kann festgelegt werden, wie ein festgelegtes Muster und/oder eine Füllung der Zeichen in Richtung der Zeichenfolge verändert werden soll.
-
Die darzustellenden Zeichen der Zeichenfolge können beliebige Schriftzeichen, Zahlzeichen, Silbenzeichen, Sonderzeichen und/oder Zeichenteile davon umfassen. Die darzustellende Zeichenfolge kann lediglich ein Zeichen oder mehrere Zeichen umfassen. Insbesondere kann die Zeichenfolge einen aus den oben genannten Zeichen zusammengesetzten Text beliebiger Länge, einen Textabschnitt, einen Satz oder eine Ansammlung mehrerer Wörter umfassen. Gemäß dem vorliegenden Verfahren kann somit ein ganzer Text, Textabschnitt, ein Satz oder eine Ansammlung mehrerer Wörter zu einem einzigen Pfad-Objekt zusammengefasst werden und als solches der Graphikschnittstelle zum Zeichnen übergeben werden.
-
Es wird ferner ein Computerprogramm-Produkt mit Programm-Code zum Durchführen des oben beschriebenen Verfahrens bereitgestellt, wenn das Computerprogramm-Produkt auf einer Computereinrichtung ausgeführt wird. Das Computerprogramm-Produkt kann hierbei auf einem Computer-lesbaren Aufzeichnungsmedium abgespeichert sein.
-
Gemäß einem weiteren Aspekt wird ein Modul zur Verarbeitung einer Zeichenfolge für eine graphische Darstellung an einer Mensch-Maschine-Schnittstelle bereitgestellt, wobei jedes Zeichen der Zeichenfolge durch eine in einer Font-Bibliothek hinterlegte Glyphe repräsentiert ist. Die einem jeden Zeichen zugeordnete Glyphe stellt hierbei wenigstens Informationen über eine Outline des Zeichens bereit. Das Modul umfasst eine TextRender-Einheit, welche dazu ausgebildet ist, wenigstens die Outline eines jeden Zeichens der Zeichenfolge aus der Font-Bibliothek abzurufen und auf Basis der abgerufenen Outlines ein einziges, die Zeichenfolge repräsentierendes Pfad-Objekt zu erzeugen, welches wenigstens die Outlines aller Zeichen der Zeichenfolge umfasst; und eine Graphikschnittstelle, welche dazu ausgelegt ist, das erzeugte Pfad-Objekt graphisch darzustellen.
-
Die Graphikschnittstelle kann als Hardware-Modul, als Software-Modul oder als kombiniertes Hardware-Software-Modul ausgebildet sein. Die Graphikschnittstelle kann wenigstens einen Graphiktreiber und eine Graphikprozessor-Einheit (GPU) umfassen. Der Graphiktreiber kann als Programmierschnittstelle (API) zum Verarbeiten von Vektorgraphik-Daten (z.B. OpenVG-API) implementiert sein. Die GPU kann Graphikfunktionen zum graphischen Darstellen des übergebenen Pfad-Objekts Vektordaten an einer visuellen Ausgabeeinheit implementieren. Ferner kann die Graphikschnittstelle einen Graphikspeicher zum Speichern oder Puffern von Pfad-Objekten umfassen.
-
Gemäß einem weiteren Aspekt wird eine Mensch-Maschine-Schnittstelle bereitgestellt, welche das oben beschriebene Modul umfasst. Die Mensch-Maschine-Schnittstelle kann dazu ausgebildet sein, Befehle und Eingaben eines Benutzers entgegenzunehmen und/oder eine Steueroberfläche oder Steuerparameter einer Maschine auszugeben. Die Mensch-Maschine-Schnittstelle kann Teil eines Infotainment-Systems oder Navigationssystems sein.
-
Figurenliste
-
Weitere Aspekte, Vorteile und Einzelheiten der vorliegenden Offenbarung ergeben sich aus der nachfolgenden Beschreibung der Ausführungsbeispiele in Zusammenhang mit den Figuren. Es zeigen:
- 1 ein Blockdiagramm eines Moduls zur Verarbeitung einer Zeichenfolge für eine graphische Darstellung an einer Mensch-Maschine-Schnittstelle;
- 2a-2c eine darzustellende Zeichenfolge und ihre Beschreibung als Vektordaten;
- 3 ein Diagramm zur Illustration eines Verfahrens zum graphischen Darstellen einer Zeichenfolgen;
- 4 ein Diagramm zur Illustration eines weiteren Verfahrens zum graphischen Darstellen einer Zeichenfolge;
- 5 ein Diagramm zur Illustration eines Verfahrens zum graphischen Darstellen einer Zeichenfolge gemäß einem Ausführungsbeispiel;
- 6 ein Flussdiagramm zur Illustration des erfindungsgemäßen Verfahrens; und
- 7 eine Darstellung zur Illustration einer Erzeugung eines Pfad-Objektes am Beispiel der in 2a gezeigten Zeichenfolge.
-
Detaillierte Beschreibung
-
Die vorliegende Offenbarung wird unter zur Zuhilfenahme schematischer Blockdiagramme und Ablaufdiagramme erläutert. Die diesen Diagrammen zugrunde liegende technische Lehre kann sowohl in Hardware als auch in Software oder in einer Kombination aus Hardware und Software implementiert werden. Zu solchen Implementierungen zählen auch digitale Signalprozessoren (DSP), anwendungsspezifische integrierte Schaltkreise (ASIC) und andere Schalt- oder Rechenkomponenten.
-
Die nachfolgende Beschreibung eines Verfahrens zum Verarbeiten einer Zeichenfolge für eine graphische Darstellung an einer Mensch-Maschine-Schnittstelle wird in Zusammenhang mit dem OpenVG-Standard näher beschrieben. OpenVG („Open Vector Graphics“) ist eine vom Khronos Konsortium entwickelte Vektor-basierte Graphik-Programmierschnittstelle (Application Programming Interface oder kurz API) für Hardware-beschleunigte zweidimensionale Vektorgraphik. Bei OpenVG handelt es sich um eine Plattform-und Programmiersprachen-unabhängige Software-Graphikschnittstelle, welche als Abstraktionsschicht zwischen einem Anwendungsprogramm und einer Graphikprozessor-Einheit (im folgenden GPU) liegt und die Anbindung von Anwendungsprogrammen an die GPU unterstützt. Insbesondere wird für die nachstehende Beschreibung auf die Terminologie von OpenVG zurückgegriffen. Es versteht sich, dass das hier beschriebene Verfahren zum graphischen Darstellen einer Zeichenfolge nicht von den Details der OpenVG-API (im Folgenden OpenVG-Treiber) abhängt, sondern auch in Zusammenhang mit einem anderen Vektor-basiertem (proprietären) API ausgeführt werden kann.
-
Für die graphische Darstellung der Zeichenfolge wird ferner ein Vektorfont, wie beispielsweise der TrueType-Font, oder kurz TTF, verwendet. Im TTF wird ein beliebiges Zeichen über eine Outline seiner Glyphe beschrieben. Die Outline repräsentiert eine Kontur oder einen Umriss der Glyphe. Sie wird durch wenigstens einen geschlossenen (und/oder offenen) Linienzug (im Folgenden Pfad genannt), dargestellt, welcher durch Vektorgraphik-Befehle mathematisch beschrieben wird. Die vektorielle Beschreibung eines Umrisses eines Zeichens in Zusammenhang mit dem OpenVG-Standard wird mit Hilfe der 2a-2c weiter unten nochmals näher beschrieben.
-
Unter Bezugnahme auf 1 wird zunächst ein Ausführungsbeispiel eines Moduls beschrieben, welches zur Implementierung des hier beschriebenen Verfahrens geeignet ist. Das Modul umfasst einen Text-Renderer 1024 und eine Graphikschnittstelle 1010. Die Graphikschnittstelle 1010 umfasst den OpenVG-Treiber 1012 und die GPU 1014. Optional kann die Graphikschnittstelle 1010 einen Graphikspeicher 1016 umfassen. Die Graphikschnittstelle 1010 ist mit einer visuellen Ausgabeeinheit 1030 kommunikativ in Verbindung (dargestellt durch Pfeil in 1). Das Modul kann in einem System, wie beispielsweise einem Infotainment-System, Navigationssystem oder Smartphone implementiert sein. Es versteht sich, dass dabei das hier beschriebene Modul auf verschiedene Ebenen des Systems verteilt sein kann. Beispielsweise kann der Text-Renderer 1024 auf Anwendungsebene, der OpenVG-Treiber 1012 auf Betriebssystemebene und die GPU 1014 auf einer Hardware-Ebene eingebettet sein.
-
Der Text-Renderer 1024 befindet sich zusammen mit einer Font-Bibliothek 1022 auf Anwendungsebene. Auf Anwendungsebene können eine oder mehrere Anwendungen 1020 ablaufen, wie beispielsweise eine graphische Benutzerschnittstelle (Mensch-Maschine-Schnittstelle), die eine darzustellende Zeichenfolge bereitstellt. Die Zeichenfolge kann hierbei eine beliebige Ansammlung von Zeichen umfassen, bestehend aus einem oder mehreren Zeichen in der Form von Schriftzeichen, Sonderzeichen, Zahlzeichen oder Silbenzeichen. Insbesondere umfasst der hier verwendete Begriff „Zeichenfolge“ auch darzustellende Texte, Textabschnitte, Sätze oder eine Ansammlung von Wörtern.
-
In der Font-Bibliothek 1022 können verschiedene vektorbasierte und/oder pixelbasierte Fonts hinterlegt sein. Für das vorliegende Verfahren wird der TrueType-Font (TTF) verwendet. In TTF wird eine Glyphe eines Zeichens durch ihre Outline (Kontur) in Form von Vektordaten (Pfad-Daten) beschrieben. Ferner werden in TTF Informationen über die Dimensionen (Höhe, Breite), Offsetinformationen (linkseitiger Offset, oberseitiger Offset) und das Kerning einer jeden Glyphe bereitgestellt. Als Font-Bibliothek 1022 kann FreeType (oder auch iType) verwendet werden, welche unter anderen das TTF-Format unterstützen.
-
Der Text-Renderer 1024 ist dazu ausgebildet, die Outline eines jeden Zeichens (von der Font-Bibliothek 1022) abzurufen und auf Basis der abgerufenen Outlines wenigstens ein Pfad-Objekt zu erzeugen. Das wenigstens eine Pfad-Objekt wird der Graphikschnittstelle 1010 zur weiteren Verarbeitung übergeben. Die konkrete Erzeugung des wenigstens einen Pfad-Objektes wird in Zusammenhang mit den 3 bis 5 noch näher erläutert. Wie ferner in Zusammenhang mit den 3 und 4 noch näher erläutert wird, wird in gängigen Verfahren zum Darstellen von Zeichen ein Pfad-Objekt für jedes Zeichen der darzustellenden Zeichenfolge erzeugt. In OpenVG ist jede Vektorgraphik ein Pfad-Objekt. Mit Pfad-Objekt ist ein Objekt gemeint, dessen visuelle Erscheinung durch Vektordaten beschrieben wird. Das bedeutet, dass ein für ein darzustellendes Zeichen erzeugtes Pfad-Objekt nicht nur die Outline beschreibenden Pfade des Zeichens umfasst (in Form von Vektordaten), sondern auch Attributdaten, welche konkret festlegen, wie das Zeichen visuell dargestellt werden soll. Attributdaten können beispielsweise eine konkrete Darstellung der Kontur (Breite, gestrichelte Kontur, Farbe), eine konkrete Füllung einer durch die (geschlossene) Kontur definierten Fläche, usw. umfassen.
-
Die Graphikschnittstelle 1010 ist dazu ausgebildet, das Pfad-Objekt auf Basis der bereitgestellten Pfade und Attribute gemäß einer in der Graphikschnittstelle 1010 implementierten Rendering-Pipeline weiterzuverarbeiten. Die Rendering-Pipeline legt fest, in welcher Reihenfolge auf der GPU 1014 implementierte Graphikverarbeitungsschritte angewandt werden, um das Pfad-Objekt zu rendern, d.h., entsprechende Bilddaten zur Anzeige auf der visuellen Ausgabeeinheit 1030 zu erzeugen. Konformität und Ansteuerung der GPU 1014 erfolgt hierbei über den OpenVG-Treiber 1012, welcher als Schnittstelle zwischen Anwendung 1020 und GPU 1014 fungiert. Insbesondere implementiert der OpenVG-Treiber 1012 eine Vielzahl an Graphikfunktionen, welche das Darstellen von Graphik-Objekten beschleunigen.
-
Die in der GPU 1014 erzeugten Bilddaten werden dann zur visuellen Darstellung an die visuelle Ausgabeeinheit 1030 ausgegeben. Die Ausgabeeinheit 1030 kann als (berührungsempfindlicher) Bildschirm oder Projektor realisiert sein.
-
Der Graphikspeicher 1016 ist dazu ausgebildet Graphik-Daten (Pfad-Objekt-Daten), welche von der GPU 1014 weiterverarbeitet werden, zwischen zu speichern.
-
Mit Hilfe der 2a-2c wird nun die vektorielle Beschreibung eines Zeichens im Rahmen des OpenVG-Standards näher beschrieben. 2a zeigt eine darzustellende Zeichenfolge „TEXT“, welche aus den vier Zeichen „T“, „E“, „X“, und „T“ besteht, und in schwarzer Füllung dargestellt werden soll. Die Füllung kann durch ein Attribut leicht festgelegt werden und von der Graphikschnittstelle 1010 entsprechend gezeichnet werden. Es muss somit lediglich die Outline der einzelnen Zeichen aus der Font-Bibliothek 1022 abgerufen werden. Die Outline der einzelnen Buchstaben „T“, „E“, „X“, und „T“ ist in 2b dargestellt.
-
Mit Hilfe des Text-Renderers 1024 und des OpenVG-Treibers 1012 wird dann für jedes Zeichen der Zeichenfolge „TEXT“ auf Basis der abgerufenen Outline und von festgelegten Attributen wenigstens ein Pfad-Objekt erzeugt, welches das visuelle Erscheinungsbild des Zeichens beschreibt. OpenVG stellt eine Vielzahl von Attributen zur Verfügung, um die visuelle Erscheinung eines Objektes festzulegen. Derartige Attribute können beispielsweise die Füllung des Objektes (Füllfarbe, Füllgradient, Füllmuster), die Darstellung der Pfade (Anzahl von Punkten auf dem Pfad, Art der Segmentverbindungen, Pfadbreite, Segmentabschluss-Stil), usw. betreffen.
-
2c zeigt exemplarisch für das Zeichen „T“, wie die vektorbasierte Beschreibung von Zeichen unter OpenVG erfolgt. Wie bereits oben erwähnt, wird die Outline einer Glyphe durch wenigstens einen geschlossenen Pfad (Linienzug) beschrieben. Der Pfad wird durch Punkte (zweidimensionale Koordinatenpunkte) und durch die Punkte verbindende Pfad-Segmente beschrieben. Die Pfad-Segmente werden in OpenVG durch entsprechende Vektorgraphik-Befehle beschrieben. Konkret kann das Zeichen „T“ durch den folgenden Array von OpenVG-Befehlen beschrieben werden:
- (1) move_to (10, 10),
- (2) line_to (10, 20)
- (3) line_to (30, 20)
- (4) line_to (30, 80)
- (5) line_to (40, 80)
- (6) line_to (40, 20)
- (7) line_to (60, 20)
- (8) line_to (60, 10)
- (9) line_to (10, 10).
-
Hierbei definiert der Befehl „move_to (x,y)“ eine anfängliche Verschiebung des Anfangspunktes (und somit der gesamten Outline) bezüglich eines zweidimensionalen Koordinatensystems (vgl. 2c, Pfeil 1), wobei die übergebenen Koordinatenwerte (x, y) den Grad der Verschiebung in beiden Dimensionen festlegen. Die konkrete Gestalt der Outline wird dann über die Befehlfolge (2) bis (9) definiert. Der Befehl „line_to(10,20)“ definiert beispielsweise das Pfad-Segment der Outline zwischen den Koordinatenpunkten (10, 10) und (10, 20) als gerade Linie. Auf dieselbe Weise beschreiben die nachfolgenden Befehle „line_to(x,y)“ gerade Linienabschnitte der Outline des Zeichens „T“ zwischen jeweils zwei nachfolgenden Koordinatenpunkten. Die Segmente sind in 2c durch entsprechende Pfeile dargestellt, wobei den Pfeilen die obige Array-Nummerierung zugeordnet wurde. Dem Befehl „line_to(x,y)“ werden hierbei lediglich die Koordinaten des Endpunktes übergeben, da als Anfangspunkt eines Pfad-Segmentes jeweils der Endpunkt eines vorangehenden Pfad-Segmentes oder der Anfangspunkt der Outline („move-to“ Befehl) festgelegt ist. Durch den oben beschriebenen Array von Befehlen kann ein geschlossener Pfad sukzessive erzeugt werden, welcher die Outline des Zeichens „T“ beschreibt. OpenVG ermöglicht neben der Darstellung gerader Liniensegmente auch die Darstellung von quadratischen oder kubischen Kurvensegmenten. Diese werden mit den Befehlen „quad_to“ oder „cubic_to“ beschrieben. Insgesamt kann festgehalten werden, dass in OpenVG ein Pfad zur Beschreibung der Outline eines beliebigen Zeichens durch einen Array an Pfad-Befehlen beschrieben wird. Die in der Befehlfolge (1) bis (9) definierte Pfad-Information kann dann (zusammen mit weiteren Attribut-Informationen) verwendet werden, um eine graphische Darstellung des Zeichens „T“ zu beschreiben. Die übrigen Zeichen „E“, „X“, und „T“ können auf dieselbe Weise beschrieben werden.
-
Mit Hilfe der 3 bis 5 werden nun Verfahren zum Verarbeiten einer Zeichenfolge unter Zuhilfenahme des OpenVG-Treibers 1012 beschrieben. OpenVG ist in der Lage Bitmap-Daten und Vektordaten zu verarbeiten. Zur graphischen Darstellung einer Zeichenfolge, wie beispielsweise der in 2a dargestellten Zeichenfolge „TEXT“, gibt es zwei bekannte Verfahren zum Darstellen von Zeichen, die in den 3 und 4 kurz erläutert werden.
-
Zunächst zu 3. Die allgemeinen Funktionen des Text-Renderers 1024, der Font-Bibliothek 1022, des OpenVG-Treibers 1012 und der GPU 1014 wurden bereits in Zusammenhang mit 1 beschrieben. Es sei in diesem Zusammenhang auf die Beschreibung der 1 verwiesen. 3 unterscheidet sich von 1 in erster Linie darin, dass der Text-Renderer 1024, die Font-Bibliothek 1022, der OpenVG-Treiber 1012 und die GPU 1014 entsprechend ihrer Aufteilung auf Anwendungsebene, Betriebssystemebene (OS) 1000 und Hardwareebene 1005 dargestellt sind.
-
Das in 3 illustrierte Verfahren ist ein Vektor-basiertes Verfahren zum Darstellen einer Zeichenfolge, bei dem die Outline (also die Pfad-Daten) einer jeden Glyphe der darzustellenden Zeichenfolge aus der Fontbibliothek aufgerufen und ein Pfad-Objekt für jedes Zeichen zur graphischen Darstellung erzeugt wird.
-
Konkret ruft der Text-Renderer 1024 für jedes Zeichen der Zeichenfolge „TEXT“ die Outline der entsprechenden Glyphe aus der Font-Bibliothek 1022 auf. Anschließend erzeugt der Text-Renderer 1024 für jedes darzustellende Zeichen auf Basis der aufgerufenen Outline ein Pfad-Objekt und übergibt dieses der Graphikschnittstelle 1010 zur graphischen Darstellung. Die Erzeugung und Übergabe des Graphik-Objektes erfolgt durch mehrere Aufrufe an den OpenVG-Treiber 1012 (sog. Calls), wobei zunächst ein Call erfolgt, um das Pfad-Objekt zu erzeugen (vgCreatePath), ein weiterer Call, um das Pfad-Objekt mit Pfad-Daten zu füllen (vgAppendPathData) und ein Call, um das Pfad-Objekt zu zeichnen (vgDrawPath). Die GPU 1014 erzeugt dann auf Basis der Pfad-Objekt-Daten (diese umfassen die Outline und Attributinformationen wie bereits oben in Zusammenhang mit den 2a-2c beschrieben) entsprechende Bilddaten, die dann der visuellen Ausgabeeinheit 1030 bereitgestellt werden. Diese Prozedur wird für jedes Zeichen der Zeichenfolge wiederholt. Mit anderen Worten wird für jedes Zeichen der Zeichenfolge „TEXT“ ein separates Pfad-Objekt erzeugt und der Rendering-Pipeline des OpenVG-Treibers 1012 übergeben. Dies ist in 3 mit den vier Pfeilen zwischen dem OpenVG-Treiber 1012 und dem Text-Renderer 1024 und zwischen dem OpenVG-Treiber 1012 und der GPU 1014 graphisch angedeutet, wobei jeder der vier Pfeile jeweils ein Zeichen der Zeichenfolge „TEXT“ repräsentiert. Zu beachten ist ferner, dass in 3 der Einfachheit halber die oben aufgeführten drei Aufrufe für jedes Zeichen zwischen einer Anwendung 1020 und dem OpenVG-Treiber 1012 in 3 nur durch einen Pfeil dargestellt sind.
-
Das in 4 gezeigte Verfahren zum Darstellen einer Zeichenfolge ist ein Bitmapbasiertes Verfahren. Es unterscheidet sich von dem in 3 gezeigten Verfahren im Wesentlichen darin, dass die den einzelnen Zeichen zugeordneten Glyphen durch Bitmaps anstatt durch Outlines dargestellt werden. Der Text-Renderer 1024 ruft für jede Glyphe ein entsprechendes Bitmap aus der Font-Bibliothek 1022 auf. Der Text-Renderer 1024 erzeugt dann mit Hilfe des OpenVG-Treibers 1012 auf Basis der aufgerufenen Bitmap-Glyphe ein Bild-Objekt und übergibt dieses der Graphikschnittstelle 1010 zur graphischen Darstellung. Die Erzeugung und Zeichnung eines jeden Bild-Objektes erfolgt wiederum durch mehrere Calls an den OpenVG-Treiber 1012, wobei ein erster Call getätigt wird, um ein Bild-Objekt zu erzeugen, ein weiterer Call getätigt wird, um das Bild-Objekt mit Bitmap-Daten zu füllen, und ein weiterer Call zum Zeichnen des Objekts getätigt wird. Auch bei diesem Verfahren wird für jedes Zeichen der Zeichenfolge ein separates Bild-Objekt erzeugt und der Graphikschnittstelle 1010 übergeben.
-
Unter Bezugnahme auf die 5 und 6 wird nun ein erfindungsgemäßes Verfahren zum Verarbeiten einer Zeichenfolge für eine graphische Darstellung beschrieben. 5 zeigt wiederum das Zusammenwirken der für die Darstellung involvierten Hardware-und Software-Komponenten. Hinsichtlich der Funktionen des OpenVG-Treibers 1012, der GPU 1014 und der Font-Bibliothek 1022 sei wiederum auf die Beschreibung der 1 verwiesen. Die Funktionsweise des Text-Renderers 1024a wird in Zusammenhang mit dem nachfolgenden Verfahren beschrieben. 6 zeigt ein entsprechendes Flussdiagramm für das Verfahren.
-
In einem ersten Schritt S10 wird wenigstens die Outline der Glyphe für jedes Zeichen der graphisch darzustellenden Zeichenfolge aus der Font-Bibliothek 1022 abgerufen. Der Text-Renderer 1024a hat Kenntnis über die darzustellende Zeichenfolge und tätigt einen wiederholten Aufruf an die Font-Bibliothek 1022 bis alle Outlines der Zeichenfolge erhalten wurden. Neben der Outline können auch weitere Informationen für die Zeichen abgerufen werden, die für jede Glyphe in der Font-Bibliothek 1022 hinterlegt sind und für die graphische Darstellung der Zeichenfolge benötigt werden können. Derartige Informationen betreffen beispielsweise die Dimensionen den Offset und das Kerning einer jeden Glyphe wie bereits weiter oben beschrieben.
-
In einem zweiten Schritt (S20) wird dann ein Pfad-Objekt für die darzustellende Zeichenfolge erzeugt. Der Text-Renderer 1024a kombiniert hierfür alle erhaltenen Outlines der Zeichenfolge zu einem einzigen Pfad, indem er für jede Outline eines Zeichens eine Translation bestimmt und jedes Pfad-Segment der Outline mit Hilfe der Translation neu berechnet. Die Zusammensetzung (Kombination) der Outlines zu einem einzigen Pfad wird noch in 7 anhand der Zeichenfolge „TEXT“ beispielhaft beschrieben. Wesentlich ist, dass gemäß dem erfindungsgemäßen Verfahren der Text-Renderer 1024a alle Outlines der Zeichenfolge zu einem Pfad zusammensetzt und ein einziges Pfad-Objekt für die gesamte Zeichenfolge erzeugt.
-
Die Erzeugung des einzigen Pfad-Objekts erfolgt dann durch einen vgCreatePath-Call, um ein leeres Pfad-Objekt zu erzeugen, und einen vgAppendPathData-Call, um das Pfad-Objekt mit den kombinierten Pfad-Daten zu füllen.
-
In einem dritten Schritt S30 wird das erzeugte Pfad-Objekt für die Zeichenfolge an die Graphikschnittstelle 1010 übergeben. Der Text-Renderer 1024a übergibt das Pfad-Objekt durch einen vgDrawPath-Call an die Schnittstelle. Die GPU 1014 erzeugt dann in bekannter Weise auf Basis der erhaltenen Daten die darzustellende Bildinformation.
-
Gemäß dem vorliegenden Verfahren wird lediglich ein Pfad-Objekt für die gesamte darzustellende Zeichenfolge erzeugt und der Graphikschnittstelle 1010 übergeben. Dies wird in 5 mit dem einen einzigen Pfeil zwischen dem Text-Renderer 1024a und dem OpenVG-Treiber 1012 und zwischen dem OpenVG-Treiber 1012 und der GPU 1014 symbolisiert. Mit anderen Worten wird die gesamte Zeichenfolge als ein einziges Pfad-Objekt gezeichnet. Es wird somit nicht für jedes Zeichen ein separates Pfad-Objekt erzeugt und der Graphikschnittstelle 1010 zur Darstellung übergeben, wie es beispielsweise in den in Zusammenhang mit den 3 und 4 bekannten Verfahren der Fall ist. Auf diese Weise kann die Anzahl der Calls zwischen dem OpenVG-Treiber 1012 und der Anwendung (oder dem Text-Renderer 1024) drastisch reduziert werden. Gemäß dem erfindungsgemäßen Verfahren braucht es (n-1) „Draw-Calls“ weniger als in den bezüglich der 3 und 4 besprochenen Verfahren, um eine Zeichenfolge mit n Zeichen darzustellen. Jeder Call zum Erzeugen und Zeichnen von Pfad-Objekten beansprucht Ressourcen (Speicher- und Prozessorressourcen) und hat damit Auswirkung auf die Performance der Darstellung. Durch das hier beschriebene Verfahren wird die Zahl der Calls drastisch reduziert, wodurch die Geschwindigkeit der graphischen Zeichendarstellung deutlich optimiert wird.
-
In 7 wird die Erzeugung eines einzigen, die Zeichenfolge repräsentierenden Pfad-Objekts anhand der Zeichenfolge „TEXT“ nochmals näher erläutert. Der Text-Renderer 1024a ist dazu ausgebildet, alle aus der Font-Bibliothek 1022 abgerufenen Outlines zu einem einzigen Pfad zu kombinieren. Hierzu werden die Outlines für die Zeichen entsprechend der Zeichenreihenfolge und einem gewünschten oder vorgegebenen Abstand zwischen den jeweils aufeinanderfolgenden Zeichen neu berechnet. Konkret wird eine eindimensionale oder zweidimensionale Translation für jede ein Zeichen repräsentierende Outline (also für jedes Pfad-Segment) berechnet, welche angibt, welche Koordinaten die Punkte der Outline im Pfad-Objekt annehmen. Die Berechnung der Outline-Translation kann schrittweise auf Basis der berechneten Positionsinformation der vorhergehenden Outline erfolgen.
-
Im Beispiel der horizontal ausgerichteten Buchstabenfolge „TEXT“ wird zunächst die Outline des ersten Zeichens „T“ berechnet. Da „T“ das erste darzustellende Zeichen ist, hängt die Berechnung der Outline oder der Pfad-Segmente von keinem anderen Zeichen ab. Die Pfad-Segmente des ersten Zeichens „T“ können daher um einen beliebigen Vektor verschoben werden (anfängliche Verschiebung mit „move-to“ Befehl). Die Outline des ersten Zeichens „T“ kann beispielsweise durch den in Zusammenhang mit 2c oben angegebenen Array von Pfad-Segmenten (2) bis (9) beschrieben werden. Die Outline des ersten „T“-Zeichens wird dann mit den Outlines der nachfolgenden Zeichen kombiniert.
-
Für die Kombination der Outlines der beiden aufeinanderfolgenden Zeichen „T“ und „E“, wird die Outline des zweiten Zeichens „E“ relativ zur Outline des ersten Zeichens „T“ um einen Translationsvektor verschoben (siehe
7, Pfeil 10). Da es sich im vorliegenden Fall um eine horizontale Aneinanderreihung von Zeichen handelt, wird das zweite Zeichen „E“ lediglich horizontal verschoben, wobei der horizontale Startpunkt des Zeichens „E“ gemäß der Translationsvorschrift
„Starting_Point_of_T+Advance_of_T+Kerning of_T_to_E+Starting_Point_of_E“
berechnet wird. Gemäß der gegebenen Translationsvorschrift wird somit der Startpunkt des Zeichens „E“ um den Startpunktwert des Zeichens „T“, einen Vorschubswert des Zeichens „T“, einen Kerning-Wert des Zeichens „T“ (dieser kann auch negativ sein) und einen vorgegebenen Startpunktwert des Zeichens „E“ verschoben. Mit anderen Worten wird jedes Pfad-Segment des Zeichens „E“ (also Pfad-Segmente 11-22 in
7) und somit die gesamte Outline des Zeichens „E“ um einen durch obige Translationsvorschrift definierte Translation verschoben. Nimmt beispielsweise das erste Zeichen „T“ die Werte 10, 80 und (-5) für Startpunkt, Vorschub und Kerning in horizontale Richtung, an und ist für das zweite Zeichen „E“ der Startwert 0 vorgegeben, so verschiebt sich der neu berechnete Startwert für die Outline „E“ gemäß der Gleichung
-
Um diesen Wert verschieben sich alle Pfad-Segmente 11-22 der Outline für das Zeichen „E“.
-
Die Verschiebung einer Outline des dem zweiten Zeichen „E“ folgenden dritten Zeichens „X“ wird in Abhängigkeit der neu berechneten Koordinaten für die Outline des zweiten Zeichens „E“ auf dieselbe Art und Weise berechnet, wie durch den Pfeil 23 in 7 dargestellt ist. Genauso wird, ausgehend von der neu berechneten Position der Outline für das Zeichen „X“ die horizontale Verschiebung des vierten Zeichens „T“ berechnet, wie durch den Pfeil 36 in 7 angedeutet ist.
-
Die mit Hilfe des obigen Berechnungsalgorithmus neu berechneten Outlines werden dann zu einem einzigen Pfad kombiniert. Entsprechend wird für die gesamte Zeichenfolge ein einziges Pfad-Objekt erzeugt, welches aus dem folgenden Array von Befehlen besteht.
- (1) move_to (10, 10),
- (2) line_to (10, 20)
- (3) line_to (30, 20)
- (4) line_to (30, 80)
- (5) line_to (40, 80)
- (6) line_to (40, 20)
- (7) line_to (60, 20)
- (8) line_to (60, 10)
- (9) line_to (10, 10)
- (10) move_to (85, 10)
- (11) line_to (85, 80)
- (12) line_to (135, 80)
- (13) ... (21)
- (22) line_to (85, 10)
- (23) move_to (160,10)
- (24) ... (43)
- (44) line_to (235, 10).
-
Der Befehl „move_to (85,10)“ in Array-Zeile (10) gibt an, wo das erste Zeichen „T“ endet und das zweite Zeichen „E“ anfängt. Genauso gibt der Befehl „move_to (160,10)“ in Array-Zeile (23) an, wo das zweite Zeichen „E“ endet und das dritte Zeichen „X“ anfängt. Der Befehl „line_to (235,10)“ in Array-Zeile (44) gibt schließlich an, wo das vierte Zeichen „T“ und somit die Zeichenfolge endet. Somit werden alle Pfade der Glyphen in einem einzigen Objekt zur graphischen Darstellung zusammengefasst.
-
Es versteht sich, dass das hier gezeigte Beispiel mit einer horizontalen Aneinanderreihung (Verschiebung) einer Zeichenfolge lediglich illustrativen Charakter hat. Anstelle einer horizontalen Translation kann dieselbe Translation auch in vertikaler Richtung durchgeführt werden. Zusätzlich oder alternativ hierzu ist auch vorstellbar, dass in beiden Richtungen (also in horizontale Richtung und vertikaler Richtung) eine entsprechende Translation durchgeführt wird. Ferner ist die Darstellung einer Zeichenfolge als ein einziges Pfad-Objekt nicht auf die Darstellung von vier Zeichen beschränkt. Ganz im Gegenteil, da OpenVG keine Beschränkungen für die Größe vom Pfad-Objekt vorgibt, kann eine Zeichenfolge oder Text beliebiger Länge als einzelner Pfad modelliert werden und ein einziges Pfad-Objekt für die Zeichenfolge oder den Text erzeugt werden.
-
Die Zusammenfassung der darzustellenden Zeichen in ein einziges Pfad-Objekt reduziert die Zahl der Calls, wie oben dargestellt. Die hier beschriebene Zusammenfassung zu einem Pfad-Objekt bringt aber auch in Hinsicht von Datenreduzierung und Vermeidung von Overhead-Daten große Vorteile. So müssen beispielsweise Attributdaten, welche Einzelheiten der visuellen Darstellung der Schriftzeichen festlegen, lediglich einmal für die ganze Zeichenfolge festgelegt werden. Hingegen müssen bei einem Glyphen-weisen Zeichnen, wie es beispielsweise in dem in 3 gezeigten Verfahren der Fall ist, für jede Glyphe mit Erzeugung eines neuen Pfad-Objektes die Attribut-Daten neu bereitgestellt werden.