Home | Impressum | KIT

Etwas Grafik in C++ — die Bibliothek CImg

Grafikbefehle gehören nicht zum standardisierten Sprachumfang von C++. Dennoch ist es natürlich möglich, aus einem C++ Programm heraus Grafikelemente zu erzeugen. Zur Grafikerzeugung und -darstellung gibt es zahlreiche sogenannte "Bibliotheken", die dann Klassen oder Funktionen mehr oder weniger komfortabel zur Verfügung stellen.
Eine relativ kleine und sehr praktische Bibliothek für Grafikausgaben und Bildbearbeitung ist CImg. Die Bibliothek ist in C++ geschrieben und hat zwei Vorteile: Erstens: mit dem gleichen Programmquelltext können sowohl unter Unix/Linux als auch unter Windows Grafiken ausgegeben werden. Zweitens: es wird nur eine einzige (Quelltext-)Datei benötigt.

Anleitung

  • Um CImg zu verwenden, benötigen Sie lediglich die Datei CImg.h (hier erhältlich), die den gesammte Quelltext der Bibliothek in einer "Header-Datei" enthält. Binden Sie diese Datei mittels #include "CImg.h" in Ihrem Programm ein. Dabei sollte CImg.h in Ihrem aktuellen Arbeitsverzeichnis sein.
  • Compilieren: Bei der Compilation (genauer: beim "Linken") müssen die jeweiligen "fundamentalen" Grafikroutinen Ihres Betriebssystems eingebunden werden. (Diese sind ihrerseits ebenfalls Bibliotheken und werden von CImg aufgerufen. CImg ist also eigentlich nur ein "Bindeglied" zwischen Ihrem Programm und den Grafikbefehlen, die das Betriebssystem des Rechners mitbringt.) Welche Bibliotheken Sie hier angeben ist abhängig vom Betriebssystem, wo und wie Sie diese angeben ist abhängig von der Entwicklungsumgebung, die Sie verwenden.
    Eine kurze Liste:
    • Linux (Kommandozeile): g++ IhrCode.cc -lX11 -lpthread
      (weitere Compileroptionen können natürlich verwendet werden). Falls Sie eine Entwicklungsumgebung einsetzen, sollte der Compileraufruf so konfiguriert werden, dass -lX11 -lpthread vorkommt.
      Da nun hierbei die Funktionsköpfe von X11 (fundamentale Grafikroutinen) des Linuxsystems verwendet werden, muss das Paket "libx11-dev" oder "xorg-x11-devel" (Name variiert etwas je nach Linux-Distribution) vorhanden sein.
      Diese gleichen Compiler-Optionen gelten wahrscheinlich auch für Mac OS X.
    • Windows: Es muss die Bibliothek gdi32 eingebunden werden. Unter Orwell-Dev-C++ ist der einfachste Weg, im Menüpunkt Tools/Compiler-Options (deutsch: Werkzeuge/Compiler Optionen) im Reiter Compiler unter "Add these commands to the linker command line" den Text -lgdi32 einzutragen.
  • Mit diesem kleinen Beispielprogramm cimg-example.cc lernen Sie einige Befehle von CImg kennen. Weitere Befehle und weiteres Know-How finden sich in der CImg-Dokumentation.

Kleiner Blick über den Zaun: Bei der Programmierung eines "Graphical User Interface" (GUI) bedient man sich üblicherweise eines GUI-Toolkits/Widget-Toolkits. Diese stellen in der Regel allerlei Grafikhilfsmittel, z.B. Schaltflächen, Menüfelder und Regler (Mausbedienung) zur Verfügung. Im Allgemeinen sind sie deutlich mächtiger und umfangreicher aber nicht so einfach zu verwenden wie CImg. Weit verbreitet sind die plattformübergreifenden Toolkits Qt und GTK+.