Categories: Sonstiges

Wie Sie einen Einstieg in Core Graphics finden.

Mac- und iOS-Entwickler haben eine Reihe von verschiedenen Programmierschnittstellen, um Objekte auf den Bildschirm zu bringen. UIKit und AppKit haben verschiedene Bild-, Farb- und Pfadklassen.

Mit Core Animation können Sie Layer von Objekten verschieben.

OpenGL ermöglicht das Rendern von Objekten im 3D-Raum. Mit AVFoundation können Sie Videos abspielen.

Core Graphics, auch unter dem Markennamen „Quartz“ bekannt, ist eine der ältesten grafikbezogenen APIs auf den Plattformen. Quartz bildet die Grundlage der meisten Objekte in 2D. Möchten Sie Formen zeichnen, sie mit Farbverläufen füllen und ihnen Schatten geben? Das ist mit Core Graphics möglich. Weiterhin ermöglicht Core Graphics Bilder auf dem Bildschirm zusammenzusetzen und PDFs zu erstellen.

Core Graphics ist eine ziemlich große API, die den Bereich von grundlegenden geometrischen Datenstrukturen (wie Punkte, Größen, Vektoren und Rechtecke) und die Aufrufe zu deren Manipulation, Objekte, die Pixel in Bilder oder auf dem Bildschirm rendern, bis hin zur Ereignisbehandlung abdeckt. Sie können Core Graphics verwenden, um „Event Taps“ zu erstellen, mit denen Sie den Stream von Ereignissen (Mausklicks, Screen Taps, zufälliges Keyboard Mashing), die in die Anwendung kommen, abhören und manipulieren können.

Warum behandelt eine Grafik-API Benutzerereignisse? Wie vieles hat das mit dem technologischen Fortschritt zu tun. Und ein wenig sich mit der Entwicklungsgeschichte auszukennen, kann einen Überblick darüber verschaffen, warum sich Teile der CG so verhalten, wie sie es tun.

Ein PostScript in der Entwicklungsgeschichte.

Damals, in den 1980er Jahren, waren Grafik-APIs un Vergleich zu dem, was wir heute haben, ziemlich primitiv. Sie können aus einer begrenzten Palette von Farben wählen, einzelne Pixel zeichnen, Linien legen und einige Grundformen wie Rechtecke und Ellipsen zeichnen. Man konnte Clipping-Regionen einrichten, die der Welt sagten: „Hey, zeichne hier nicht“ und manchmal hatte man einige wilde Features wir die Kontrolle, wie breit die Linien sein könnten. Häufig gab es „Bit Blitting“-Funktionen zum Kopieren von Pixelblöcken. QuickDraw auf dem Mac hatte eine coole Funktion mit der Bezeichnung Regionen, mit der Sie beliebig geformte Bereiche erstellen und diese zum Durchmalen, Auschneiden, Umreißen oder Testen verwenden konnten. Aber im Allgemeinen waren die damaligen APIs sehr pixelorientiert.

1985 führte Apple den LaserWriter ein, einen Drucker, der einen Mikroprozessor enthielt, der leistungsfähiger war als der Computer, an den er angeschlossen war, 12-mal mehr Arbeitsspeicher hatte und doppelt so viel kostete. Dieser Drucker produzierte eine unglaublich schöne Ausgabe, dank einer Technologie mit der Bezeichnung PostScript.

PostScript ist eine stack-based Computersprache von Adobe, die mit FORTH vergleichbar ist. PostScript als Technologie war darauf ausgerichtet, Vektorgrafiken zu erstellen, anstatt pixelbasiert zu sein. Ein Interpreter für die PostScript-Sprache wurde in den LaserWriter eingebettet. Wenn also ein Programm auf dem Mac etwas drucken wollte, erzeugte das Programm Code, der in den Drucker geladen und ausgeführt wurde.

Die Darstellung der Seite als Programm war eine sehr wichtige Designentscheidung. Dadurch konnte das Programm den Inhalt der Seite algorithmisch darstellen, so dass das Gerät, das das Programm ausgeführt hat, die Seite mit der höchstmöglichen Auflösung zeichnen konnte. Für die meisten Drucker damals waren es 300 dpi. Für andere 1200 dpi. Alle aus dem gleichen generierten Programm.

Zusätzlich zum Rendern von Seiten ist PostScript turing-fähig und kann als Universal-Programmiersprache behandelt werden. Sie könnten sogar einen Webserver schreiben.

Begleitende CuBEs.

Als die NeXT-Ingenieure ihr System entwarfen, wählten sie PostScript als Rendering-Modell. Display PostScript, a.k.a. DPS, hat das PostScript-Modell so erweitert, dass es für einen gefensterten Computerbildschirm funktioniert. Tief im Herzen lag jedoch ein PostScript Interpreter. NeXT-Anwendungen können ihre Bildschirmdarstellung in PostScript-Code implementieren und den gleichen Code für den Druck verwenden. Sie können auch PostScript in C-Funktionen umbrechen, um vom Anwendungscode aus aufzurufen.

Display PostScript war die Grundlage der Benutzerinteraktion. Ereignisse durchliefen das DPS-System und wurden dann an Anwendungen gesendet.

NeXT war damals nicht das einzige Windowing Problem, das PostScript verwendete. Sun`s News hatte einen eingetteten PostScript-Interpreter, der die Interaktion des Benutzers mit dem System vorantrieb.

Gallonen aus Quarz.

Warum verwenden OS X und iOS nicht Display PostScript? Die Ursache ist wie so oft im Geld begründet. Adobe hat eine Lizenzgebühr für Display PostScript erhoben. Außerdem ist Apple dafür bekannt, so viel wie möglich von seinem Technologie-Stack besitzen zu wollen. Durch die Implementierung des PostScript-Zeichnungsmodells, aber nicht wirklich mit PostScript, konnten sie die Zahlung der Lizenzgebühren vermeiden und auch den Kern-Grafikcode besitzen.

Es wird allgemein gesagt, dass Quartz „auf“ PDF basiert. PDF ist das PostScript-Zeichenmodell ohne die beliebige Programmierbarkeit. Quartz wurde so konzipiert, dass die typische Verwendung der API sehr genau auf die PDF-Unterstützung abgestimmt ist, wodurch die Erstellung von PDFs auf der Plattform nahezu trivial wird.

Die gleichen grundlegenden Mechanismen wurden beibehalten, obwohl Display PostScript durch Quartz ersetzt wurde, einschließlich der Ereignisbehandlung.

Basis-Architektur.

Alle ihre Core Graphics-Zeichnungsaufrufe werden in einem „Kontext“ ausgeführt, der eine Sammlung von Datenstrukturen und Funktionszeigern ist, welche steuert, wie das Rendern erfolgt.

Es gibt verschiedene Kontexte, wie z.B. NSWindowGraphicsContext. Dieser spezielle Kontext nimmt die von ihrem Code ausgegebenen Zeichenbefehle und legt dann die Pixel in einem Teil des gemeinsamen Speichers im Adressraum ihrer Anwendung ab. Dieser Speicher wird auch mit dem Windows-Server geteilt. Der Windows-Server nimmt alle Window-Oberflächen aus allen laufenden Anwendungen und schichtet sie auf dem Bildschirm zusammen.

Ein weitere Core Graphics-Kontext ist ein Bildkontext. Jeder Zeichencode, den Sie ausführen, legt Pixel in einem Bitmap-Bild ab. Sie können dieses Bild verwenden, um in andere Kontexte zu zeichnen oder als PNG oder JPEG im Dateisystem zu speichern. Es gibt auch einen PDF-Kontext. Der von ihnen ausgeführte Zeichencode wird nicht in Pixel umgewandelt, sondern in PDF-Befehle und wird in einer Datei gespeichert. Später kann ein PDF-Viewer diese PDF-Befehle in etwas Sichtbares umwandeln.

Was kommt demnächst?

In einem späteren Beitrag werfen wir einen genaueren Blick auf die Kontexte und einige der komfortablen APIs, die über Core Graphics geschichtet sind.

3DMaster