Forum: PC-Programmierung Grafik in C


von Benedikt (Gast)


Lesenswert?

Gibt es irgendeine Möglichkeit einfache Grafiken in C darzustellen ?
Ich habe bisher einfache Grafikdarstellungen mit QBasic oder in
Assembler gemacht. Das erstere ist zu langsam, das andere nur für
einfache Darstellungen zu gebrauchen.
Daher bin ich schon vor Jahren auf C umgestiegen, nur bei
Grafikdarstellungen noch bei QBasic hängen geblieben.

Jetzt suche ich irgendeine Funktion, die es mir ermöglicht, in eine
andere Auflösung zu wechseln und einzelne Pixel zu setzen, so ähnlich
wie in Basic eben.
Gibt es sowas überhaupt in C ?

von Rufus T. Firefly (Gast)


Lesenswert?

In C als solchem nicht, da Graphikausgabe überhaupt gar nichts
standardisiertes ist.
Je nach Betriebssystem, für das Du Deine Programme schreibst, und je
nach verwendetem C-Compiler mag es Unterstützungsfunktionen für
einfache Graphikausgaben geben, aber das ist eben sehr spezfifisch.

Unter DOS (damit meine ich DOS, nicht die Windows-eigene Kommandozeile)
kann man beispielsweise Programme mit Borland Turbo C und den
enthaltenen BGI-Funktionen schreiben.
Unter Windows muss man ... naja, halt ein Windows-Programm schreiben.
Das ist deutlich komplexer, hier empfiehlt sich der Einsatz von C++ und
einer Klassenbibliothek zur Oberflächenprogrammierung (MFC, wxWidgets,
QT oder das Zeugs, das Borland aus Delphi 'rüber"gerettet" hat).

Aaalso: Unter welchem Betriebssystem schreibst Du mit welchem
Entwicklungssystem Deine Programme?

von Benedikt (Gast)


Lesenswert?

Ich schreibe alle meine Programme bisher mit Microsoft Visual C++,
allerdings nur als Kommandozeilen Programme.

Alternativ hätte ich noch den Borland C++ Builder zur Verfügung,
allerdings habe ich damit noch nicht gearbeitet.

von Rufus T. Firefly (Gast)


Lesenswert?

Gut, das ist schon mal 'ne klare Ansage.

Da Du Windows-Programme schreibst (auch die Konsolapplikationen gehören
dazu), musst Du Dich bei Graphikausgaben auch an Windows orientieren.
Das ist leider deutlich komplizierter als der unter DOS beschrittene
Weg, wo man einfach in den Bildschirmspeicher schreiben konnte ...

Sofern Du wirklich in C (und nicht in C++) programmieren möchtest, lege
ich Dir die Lektüre des Standardwerks von Charles Petzold ("Programming
Windows") nahe, das beschreibt, wie man mit der Windows-API
Windows-Programme schreibt.
Da die Windows-Oberfläche ereignisorientiert arbeitet, sehen solche
Programme komplett anders aus als das, was Du von Konsolapplikationen
her gewöhnt bist - riesige switch/case-Statements, die auf alle
möglichen Nachrichten mit Codefragmenten reagieren und hier und da
etwas tun.

Etwas komfortabler ist da die Programmierung in C++, wenn denn eine
Klassenbibliothek verwendet wird, die die Windows-API abstrahiert.
Microsoft selbst liefert mit VC die MFC aus, die nicht ganz ohne Grund
einen schlechten Ruf hat; sie ist ziemlich lausig dokumentiert, recht
unstrukturiert aufgebaut und man merkt ihr ihr Alter an.
Das heißt nicht, daß man nicht mit MFC programmieren kann; ich mache
das seit annähernd zehn Jahren recht erfolgreich, aber mittlerweile
gibt es auch Alternativen, die lohnenswert sind.
Für MFC lohnenswerte Literatur sind Jeff Prosise, "Programming Windows
with MFC" und der Kruglinski (Titel ist mir im Moment entfallen) sowie
Shepherd/Wingo "MFC Internals".

Alternative Klassenbibliotheken, die sich mit VC einsetzen lassen,
wären Trolltechs QT, das derzeit allerdings nur mit dem Einsatz von
ziemlich viel Geld zu bekommen ist (was sich allerdings in absehbarer
Zeit ändert; Trolltech stellt demnächst auch die Windows-Portierung von
QT unter die GPL) und wxWidgets. Letzteres ist frei verfügbar
(www.wxwidgets.org) und IMHO gar kein so schlechter Ansatz.
Ein auch nicht zu unterschätzender Vorteil sowohl von QT als auch von
wxWidgets ist die Unabhängigkeit vom Compiler und auch vom
Betriebssystem - beide sind auch für Mac OS und Linux verfügbar, so daß
sauber dafür geschriebene Anwendungen leicht portierbar sein sollten.
wxWidgets kann man mit so gut wie jedem für Windows verfügbaren
32-Bit-Compiler einsetzen, auch QT ist nicht an VC gebunden.

Dennoch:
Auch mit so einer Klassenbibliothek ist das
einfach-mal-so-'ne-Graphik-ausgeben ein ganz schön umständlicher
Aufriss, aber das liegt daran, daß die Graphikkarte dem Betriebssystem
und der graphischen Oberfläche "gehört" und obendrein auch eine
adäquate Abstraktionsebene für Devicetreiber erforderlich ist.

Ein alternativer Ansatz wäre die Beschäftigung mit DirectX, das ist die
Spieleprogrammierschnittstelle von Windows, bei der deutlich direkterer
Zugriff auf die Graphikhardware möglich ist.
Ich sehe darin allerdings kein erstrebenswertes Ziel, da einerseits
Portierbarkeit in die weite Ferne rückt und andererseits eine etwaige
Programmoberfläche (Eingabemasken etc.) komplett selbst entwickelt
werden müsste, obwohl Windows sowas ja eigentlich ganz gut unterstützt
...

von Matthias (Gast)


Lesenswert?

Hi

wenns wirklich simpel sein darf (also kaum GUI sondern Grafik) kannst
du dir auch mal openGL (evtl. (free)GLUT dazu) anschauen. Das ist super
simpel und auf vielen Systemen verfügbar.

Matthias

von Daniel M. (Gast)


Lesenswert?

Hallo,

Ich verwende die Allegro (alleg.sourceforge.net) Libary, ist auf viele
Betriebssysteme portierbar, gratis und man kann sie gut für Grafische
Anwendungen verwenden.

Daniel

von Tobi (Gast)


Lesenswert?

Wenn es denn dann eine Windows GUI sein soll würd ich auf jeden Fall
auch von der MFC abraten und wxWidgets empfehlen. Zwar ist die
Einstieghürde einiges höher aber wenn man einmal das Grundkonzept
verstanden hat erschliesst sich der Rest durch die sehr einheitliche
und konsistente Architektur fast von selbst.

von Stefan R. (Gast)


Lesenswert?

Wenn es sich um einzelne Pixel handelt und du nicht gleich ein
komplettes GUI-Toolkit haben willst, ist
www.libsdl.org
eigentlich ideal. Die Bib. bietet Plattformunabhängig unter C(++) und
weiteren duzender (Skript-)Sprachen direkten Zugriff auf die Grafik,
Sound usw. Dort sollten sich auch Tutorials zu deinem Thema finden.

Stefan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.