Was ist das? Wie geht das?

Skalieren


Skalieren
Ein Ergebnis (starke Verkleinerung auf drei Achtel).

Wissenswert

In der Bildbearbeitung versteht man unter Skalieren das Ändern der Größe eines Bildes oder eines Teils des Bildes.

Die Maße eines solchen Objekts werden dabei auf eine andere Skala umgerechnet, sein Inhalt daran angepasst und das Ergebnis wieder als Bild ins Original eingefügt. Soll das Objekt am Ende ohne Verzerrungen erscheinen, muss es seinen ursprünglichen Aspekt (das Verhältnis von Bildbreite zur Bildhöhe) beibehalten. Ist das der Fall, spricht man auch von Vergrößern und Verkleinern (sonst: Verzerren). Der Bildaspekt eines C64 beträgt 1,6 (320 geteilt durch 200 ergibt 1,6). Im Videobereich wäre das ein 16:10-Bildformat.

Unter GoDot muss beachtet werden, dass das Auswahlwerkzeug GoDots (ClipWorks) nicht pixelgenau arbeitet, sondern nur kachelgenau (auf 8×8 Pixel genau), daher ist es nicht ganz einfach, eine Einstellung für die gerade gewünschte Skalierung zu finden. Dazu weiter unten mehr.

Es gibt mehrere Werkzeuge, die GoDot für das Skalieren bereitstellt: Squeeze, Stretch, Squeeze2Clip, StretchClip, Double, Halve und die Funktionen Shrink und Zoom in ClipWorks sowie natürlich als Grundlage für alles die Clip-Funktion in ClipWorks. Beim Skalieren unter GoDot muss man weiter beachten, dass diese Werkzeuge sich immer auf das ganze Bild (320×200 Pixel bzw. 40×25 Kacheln) beziehen. Wenn StretchClip vergrößert, dann auf dieses Maß, wenn Squeeze2Clip verkleinert, dann ausgehend von diesem Maß, ebenso Double und Halve, Zoom und Shrink.

Erforderliche Werkzeuge: Squeeze · Squeeze2Clip · Stretch · StretchClip · Double · Halve · ClipWorks

Vorgehen

Um eine bestimmte Zielgröße beim Skalieren zu erreichen, sind in GoDot u.U. zwei Schritte erforderlich: Das Ausgangsobjekt wird zuerst auf Screenmaße vergrößert und dann (bei Bedarf) auf das gewünschte Maß wieder verkleinert. Die geringe Auflösung des C64 macht eventuell dabei verloren gegangene Bilddetails wieder wett (s. Bildbeispiel mit den Adlern oben). Hier eine typische Skalierungssequenz als Bildfolge:

Anfangsstadium
1. Eine Beschriftung durch Titler.
Anfangsclip bestimmen
2. Markieren der Position: 1 - 1 - 13 - 6.
Vergrößern
3. Vergrößern auf Screenmaße (0 - 0 - 40 - 25) mit StretchClip.

Zielclip bestimmen
4. Die Zielgröße wird festgelegt, hier: 9 - 10 - 26 - 12.
Verkleinern zum Ergebnis
5. Und wieder Verkleinern mit Squeeze2Clip. Das Ausgangsobjekt
(links oben eingeblendet) ist nun doppelt so groß.

Die Zwischenstadien dürfen ruhig verzerrt sein, solange das fertige Ergebnis nur ungefähr im richtigen 1,6-Aspekt erscheint. Vielleicht ist aber sogar eine Verzerrung erwünscht? Dann sollte man an den Rändern der Objekte des Endstadiums Ausgleichsmaßnahmen treffen: auffällige Treppchen müssten mit PixelEdit verfüllt werden, und zwar so, dass eine Treppe nirgendwo breiter ist als zwei Pixel. Die Hälfte der Entfernung der längeren Strecke einer Pixeltreppe muss dabei aufgefüllt werden (ein Pixel mehr, wenn die Anzahl der Pixel dieser Strecke gerade ist). Im dritten Bild dieser Sequenz wäre diese Maßnahme erforderlich gewesen.


Einstellungen

Sollen Bilder aspektgetreu skaliert werden, verwendet man Squeeze bzw. Stretch. Ansonsten muss man wissen, dass unter GoDot nicht alle gewünschten Größen möglich sind. Am besten geeignet sind alle Clip-Einstellungen, in denen der Quotient aus Breite und Höhe dem C64-Aspekt von 16:10 bzw. 8:5 (gleich 1.6) entspricht. Das sind zunächst einmal Verkleinerungen in Fünftelschritten (dem Teiler des Aspektquotienten), also auf die Werte für Breite und Höhe eines Clips von 32 und 20 (Verkleinerung auf 4/5), 24 und 15 (Verkleinerung auf 3/5), 16 und 10 (Verkleinerung auf 2/5) und 8 und 5 (Verkleinerung auf 1/5). Außerdem stehen uns exakte Halbierung und Verdopplung der Größe mithilfe von Halve und Double zur Verfügung.

Skalierung auf 3/5
Zusammen mit TurnScreen, 4Bit&Mask und einigen anderen Schmankerln eine Verkleinerung auf drei Fünftel (hier ist das Porträt skaliert).

Format Wid Hgt zu tun
256×160 32 20
192×120 24 15
128×80 16 10
64×40 8 5

Die Werte dieser Tabelle funktionieren auch anders herum, d.h. Clips mit diesen Einstellungen kann man mit StretchClip verzerrungsfrei auf Screengröße zoomen. Die erste Vergrößerung aus der Tabelle ist dann eine Skalierung von 5/4, also um 125%. Die zweite entspräche 5/3, also rund 167%, die dritte ist 5/2 (250%) die unterste entspricht fünffacher Vergrößerung (500%).

Mit Squeeze und Stretch sind auch Zwischenwerte erreichbar, da jeweils Breite oder Höhe an den gewählten Clip anpassbar sind.


Verkleinerungen in Achtelschritten (ausgehend vom Nenner des Quotienten) sind ebenfalls aspektgetreu möglich, verlangen aber fast immer die Kombination und Aufeinanderfolge mehrfacher Einstellungen, meist eine Verbindung von Verkleinerung und Vergrößerung wie oben am Anfang beschrieben. Die genauen Justierungen haben wir in der zweiten Tabelle zusammengestellt, die hoffentlich verständlich zeigt, wie es geht. Wid und Hgt entstehen durch die Einstellungen unter "zu tun" automatisch (außer für 7/8), die Achtelangaben bei Hgt entsprechen der Anzahl Rasterlinien, die in der untersten Kachel nach der Skalierung belegt sind. Verkleinerungen in Achtelschritten sind nicht umkehrbar, da sie nie in ganzzahligen Kachelgrößen resultieren (Ausnahme: die 160×100-Verkleinerung mit Halve durch Double). Ansonsten verwendet man einfach Squeeze, das führt in jedem Fall zu verzerrungsfreien Ergebnissen.

Skalierung auf 6/8
Zusammen mit QuickMask, 4Bit&Mask und Scroll eine Verkleinerung auf sechs Achtel (die kleinere Trompete ist skaliert).

Format Wid Hgt zu tun
280×175 35 22
(21 7/8)
240×150 30 18 6/8
200×125 25 15 5/8
160×100 20 12 4/8
120×75 15 9 3/8
80×50 10 6 2/8
40×25 5 3 1/8

Vergrößerungen können mit Stretch ebenfalls nach obiger Tabelle (und darüber hinaus) vorgenommen werden: Man stellt die gewünschte Clipbreite ein und der Modifier passt die korrekte Höhe automatisch an (und umgekehrt).

Obwohl diese Angaben zeigen, dass das Skalieren unter GoDot Beschränkungen unterworfen ist, hat es sich in der praktischen Arbeit erwiesen, dass die vorhandenen Möglichkeiten völlig ausreichen, um ansprechende Ergebnisse zu erzeugen. Besonders im Zusammenhang mit Beschriftungen ist das Skalieren mit GoDot sehr nützlich, wie man auf godot64.de auf vielen Seiten feststellen kann.

Hinweis: Die Lader StarPntr.128, PFoxResample, VBM und DegasPI3 verwenden eine besondere Skalierungsmethode, die die Bilder bereits beim Einlesen auf die Hälfte verkleinert (Resampling).


Anwendungsbeispiel: Übergrößen skalieren

Ein IFF-Bild
Dieses IFF-Bild war einmal auf einer unserer Shareware-Disketten zu finden. Format: 640×400 Pixel. Damals ließen sich unter GoDot
nur Ausschnitte davon anzeigen. Es liegt als GIF-Bild vor.

Manchmal möchte man ein großes Bild (größer als die C64-Auflösung von 320×200 Pixel) auf die C64-Größe herunterskalieren, also verkleinern. Viele Bilder von Fremdrechnern liegen beispielsweise im Format 640×400 Pixel vor. Auch der C128 hat mit IPaint schönes Bildmaterial in dieser Größe zu bieten. Wie wäre es, wenn wir solche Bilder auf das C64-Maß brächten? Die Resample-Lader (s. weiter oben) sind aber nur für Schwarzweißbilder geeignet, in Farbe brauchen wir ein anderes Vorgehen. Es ist mit etwas Aufwand verbunden, aber es funktioniert wunderbar.

Wir brauchen dafür folgende Werkzeugkiste: Halve, Scroll, MaskEdit, 4Bit&Mask, evtl. Temp/Undo 4Bit (oder, wenn keine REU vorhanden ist: 4BitGoDot und Bitmap,) und einen Lader für das eigentliche Bild (GIF oder Basic8Select)

Ein 640×400-Bild besteht aus vier 320×200-Bildern. Mit dem Lader müssen wir also in der Lage sein, je einen Quadranten des Ursprungsbildes einzeln laden zu können. Ferner brauchen wir eine Maske, die exakt diesen Quadranten auf dem 320×200-Bildschirm abdeckt, die also 160×100 Pixel groß ist. Jeden Quadranten müssen wir dann in Farbe auf die Hälfte skalieren, abspeichern und schließlich alles zum Ergebnis "zusammenkleben". Und so geht's:

Schritt 1: Zuerst erstellen wir die Maske, mir der wir später das Zusammenkleben durchführen. ClipWorks aufrufen (Full), und mit ClrClp/weiß/Inside den Canvas (die Bildfläche) des im Speicher vorhandenen Bildes löschen. Mit Halve auf die Hälfte skalieren (160×100). Das Ergebnis in Hires rendern und abspeichern (als Undo Rendered bei einer REU oder als Bitmap auf Disk). Dies ist die Maske.

Schritt 2: Wir holen nun nacheinander die vier Bildquadranten. Zuerst: Gehen wir mal von einem 640×400-GIF-Bild aus, also GIF/SetClip/Left: 0/Top: 0/Load GIF (weitere Einstellungen hängen vom Bild ab). Gleich mit Halve halbieren, wie auch eben bei der Maske. Das Ergebnis abspeichern (als "temp00" mit Temp bei einer REU, sonst mit 4BitGoDot). Erster Quadrant fertig, die linke obere Ecke.

Die Verkleinerung
Das Endergebnis, in Hires gerendert.

Schritt 3: Für den zweiten Quadranten laden wir das Bild erneut, diesmal mit der SetClip-Einstellung Left: 320/Top: 0. Wieder skalieren mit Halve. Die Verkleinerung ist nun in der linken oberen Ecke des Canvas, wir brauchen sie aber rechts oben, sie muss 160 Pixel nach rechts verschoben werden. Dafür hilft uns Scroll/40/rechts (viermal Execute für zusammen 160 Pixel, dann Leave). Jetzt kommt zum ersten Mal die Maske ins Spiel. Wir laden sie über 4Bit&Mask/Get Mask from Undo bei einer REU bzw. mit Get Mask from Disk). Auch die Maske ist an der falschen Position. Daher rufen wir MaskEdit auf, klicken ins Bearbeitungsfeld und geben C=m (für Mirror) ein. Das Ergebnis wird angezeigt, mit <STOP> und Exit verlassen wir den Modifier. Die Maske liegt jetzt genau über der Verkleinerung des zweiten Quadranten. Und nun die Verknüpfung: In 4Bit&Mask klicken wir auf Get 4Bit from Temp (hierfür natürlich zunächst Temp anwählen!) bzw. Get 4Bit from Disk. Das Ergebnis lassen wir uns danach ruhig schon mal anzeigen (Screen Controls/Display). Die obere Hälfte ist fertig, für den nächsten Durchgang das Bild abspeichern (gerne unter dem gleichen Namen wie bei Schritt 2, erster Quadrant). Der zweite Quadrant (die rechte obere Ecke) ist mit dem ersten verknüpft.

Schritt 4 und 5: Beim dritten und vierten Quadranten müssen wir eigentlich nur beachten, dass wir nichts an die falsche Stelle schieben. In GIF die richtigen Bildausschnitte laden und diese skalieren wie oben. Und zum Zusammenfügen drehen wir in MaskEdit beim dritten Quadranten mit C=f (Flip) und beim vierten mit C=u (UpsideDown) die Maske jeweils an die richtige Stelle. Bei Scroll müssen wir, um 100 Pixel nach unten zu gelangen, 50 einstellen und zweimal ausführen (und schließlich nochmals viermal 40 für nach rechts beim vierten Quadranten).

Am Ende kommt das kleine Bild hier rechts heraus. Ein akzeptables Ergebnis!


zurück

Arndt Dettke
support@godot64.de