In der Prüfungszeit gibt’s viel zu tun, aber ab und zu muss man was anderes machen als lernen
. Man kann zum Beispiel versuchen, was ähnliches wie die CD-Cover-Ansicht von iTunes zu implementieren.
Auf die Idee gekommen bin ich durch einen Blogeintrag von Zack Rusin, einem Qt-Entwickler. Der hat es natürlich in Qt nachgebaut, und zwar in ungefähr 300 Zeilen Code, ganz geil.
Für meine eigene Implementierung hätte ich QtRuby nehmen können, aber den Qt-Teil hat ja Zack Rusin schon gemacht. Darum entschied ich mich für Cairo und Python. Cairo ist eine C-Bibliothek zum Zeichnen von 2D-Grafiken und es gibt eine offizielle Python-Anbindung namens Pycairo. Für das Fenster hab ich GTK+ verwendet, natürlich auch mit Python.
Hier ein Bild, wie’s rausgekommen ist:

Sieht doch schon ganz nett aus, oder?
Mit Cairo kann man leider nur affine Transformationen ausführen. Deshalb sind perspektivische Verzerrungen nicht möglich, was für weitere Covers schräg neben dem in der Mitte nötig wäre.
Der Code ist 70 Zeilen lang. Der schwierigste Teil war, die richtige Transformations-Matrix rauszufinden, um das Spiegelbild zu bekommen:
mirror_m = cairo.Matrix(1, 0, 0, -self.mirror_factor,
0, img_h + self.mirror_factor*img_h)
Das self.mirror_factor ist 0.7 und entspricht der Stauchung. Der Wert wird negativ übergeben, um die Spiegelung zu erhalten. Das letzte Argument ist dafür da, die Spiegelung an die richtige Position zu bringen. Danach wird noch ein Verlauf von halb durchsichtig bis durchsichtig darübergelegt, und fertig ist das Spiegelbild.
Den Code zum ausprobieren gibt’s hier. Das anzuzeigende Bild muss cover.png heissen und im selben Verzeichnis liegen.