Wie erstellt man einfache Grafiken?
-
@Fragender ASCII-Graphiken wären etwas zu wenig, es sollten schon kleine Punkte sein, die man mit einer gewissen Genauigkeit positionieren und aneinanderreihen kann.
@SeppJ Ganz von Grund auf muß es ja nicht sein und das mit dem Aufwand verstehe ich noch nicht. Meine Vorstellung ist: Das Anliegen, an eine bestimmte Stelle des schwarzen Bildschirms einen kleinen weißen Punkt zu setzen, klingt nicht, als ob es viel ungewöhnlicher oder komplizierter umzusetzen sein sollte als das Anliegen, einen weißen Buchstaben auszugeben. Gibt es also nicht, ähnlich zu printf, so etwas wie eine Funktion, sagen wir "pix", die von zwei Variablen abhängt und wo z. B. pix(0.6,0.4) dazu führt, daß von der linken unteren Bildschirmecke um 60% der Breite nach rechts und 40% der Höhe nach oben gerückt und an der erreichten Position ein Punkt gezeichnet wird? Oder eine Funktion "pic", die als Variable ein Feld oder was weiß ich mit lauter Einträgen für Koordinaten und Farbwerte hat und diese auf den Bildschirm bringt?
-
Ganz von Grund auf muß es ja nicht sein und das mit dem Aufwand verstehe ich noch nicht. Meine Vorstellung ist: Das Anliegen, an eine bestimmte Stelle des schwarzen Bildschirms einen kleinen weißen Punkt zu setzen, klingt nicht, als ob es viel ungewöhnlicher oder komplizierter umzusetzen sein sollte als das Anliegen, einen weißen Buchstaben auszugeben.
Ist es aber. Einen Buchstaben kann man praktisch immer irgendwie auf irgendeinem Gerät ausgeben, das an irgendeinen "Rechner" angeschlossen ist, daher kann man Zeichen immer printen. In Standard-C garantiert dir niemand, dass es überhaupt einen modernen Monitor an deiner Rechenmaschine gibt! Wenn du jetzt an einen PC denkst (C läuft teilweise auch auf anderer Hardware!), dann wirst du einen Monitor und eine Grafikkarte haben (oder auch mehrere Monitore/Graka). Diese hat/haben Treiber. Darüber kann man dann Grafik machen. Beziehungsweise das Betriebssystem nimmt dir dann diese Arbeit ab. Wie auch immer, Grafikausgabe ist hardwareabhängig (und betriebssystemabhängig) und daher etwas ganz anderes als eine Textausgabe. Nutzt du Windows, Mac oder Linux? Alles anders. Aber der C-Standard sagt dazu nichts - da bieten dir die Betriebssysteme eigene (und nicht kompatible) Funktionen. Daher ist es am besten, wenn man eine Bibliothek nutzt, die die unterschiedlichen Betriebssysteme hinter ein gleiches, einheitliches Interface stellt. Ich kenne mich im Grafikbereich nicht aus.
Für C++ gibt es z.B. https://libcinder.org/ (Windows+Mac), womit man recht schnell was machen kann. Wenn du in einem dieser "modernen" Systeme arbeitest, willst du vielleicht auch erstmal ein "Fenster" erzeugen - und dann im Fenster irgendwie herummalen. Für sowas (für die großen Betriebssysteme) kannst du z.B. Qt nehmen (allerdings C++). Für C fällt mir z.B. https://www.gtk.org/ ein. Eine andere Grafikbibliothek für C ist https://www.libsdl.org/ ein (aber ich habe außer mit Qt keine Erfahrungen!)
Einfach irgendwie einen Punkt auf den Bildschirm malen - das geht nicht - das verbietet dir i.d.R. das Betriebssystem. Wäre ja blöd, wenn du auf einmal in ein Fenster einer fremden Anwendung reinmalen könntest!
(dieser Text hier wird nicht 100% richtig sein, aber sollte das grundlegende Problem verdeutlichen)
-
@wob sagte in Wie erstellt man einfache Grafiken?:
Einfach irgendwie einen Punkt auf den Bildschirm malen - das geht nicht - das verbietet dir i.d.R. das Betriebssystem.
Auf alten Architekturen konnt man aber die Zeichen austauschen und so Pseudografik im Textmodus nutzen. So wurden in den 80ern einige Spiele programmiert. Keine Ahnung ob das heute nooch so einfach geht.
-
@Ein-Gast sagte in Wie erstellt man einfache Grafiken?:
@Fragender ASCII-Graphiken wären etwas zu wenig, es sollten schon kleine Punkte sein, die man mit einer gewissen Genauigkeit positionieren und aneinanderreihen kann.
Ja, ich habe die Frage falsch verstanden, sorry noch mal.
-
@Tyrdal sagte in Wie erstellt man einfache Grafiken?:
Auf alten Architekturen konnt man aber die Zeichen austauschen und so Pseudografik im Textmodus nutzen. So wurden in den 80ern einige Spiele programmiert. Keine Ahnung ob das heute nooch so einfach geht.
Wenn du das einfach nennst...
Moderne Grafikframeworks machen es einem vielleicht schwierig, einen einzelnen Pixel auf dem Schirm gezielt zu setzen, aber das ist so, weil man das für ernsthafte moderne Grafik gar nicht braucht. Wer das will, soll halt, wie erklärt, eine Bitmap malen. Dafür ist es mit dem modernen Framework 1000x einfacher hochkomplizierte Effekte zu erzielen, die man sich in der Zeit des Einzelpixelsetzens nicht einmal erträumen konnte.
-
@Tyrdal sagte in Wie erstellt man einfache Grafiken?:
Auf alten Architekturen konnt man aber die Zeichen austauschen und so Pseudografik im Textmodus nutzen. So wurden in den 80ern einige Spiele programmiert. Keine Ahnung ob das heute nooch so einfach geht.
Bei 80x25 Zeichen (im Textmodus) kann man 1000 Zeichen auf dem Schirm darstellen. Man hatte aber nur 256 (oder 128) verschiedene Zeichen zur Verfügung.
Einfach ist das nicht.
-
@Ein-Gast sagte in Wie erstellt man einfache Grafiken?:
Gibt es also nicht, ähnlich zu printf, so etwas wie eine Funktion, sagen wir "pix", die von zwei Variablen abhängt und wo z. B. pix(0.6,0.4) dazu führt, daß von der linken unteren Bildschirmecke um 60% der Breite nach rechts und 40% der Höhe nach oben gerückt und an der erreichten Position ein Punkt gezeichnet wird? Oder eine Funktion "pic", die als Variable ein Feld oder was weiß ich mit lauter Einträgen für Koordinaten und Farbwerte hat und diese auf den Bildschirm bringt?
C selber kennt das nicht.
Aber C-Compiler für MS-DOS (z.B. Quick-C oder Turbo-C) hatten Erweiterungen, womit man das machen konnte.
Meist aber mit Absolutkoordinaten, da man Pixel zählen kann.
Mit dem aufkommen von GUI und Fenstern, ist das aber ins Betriebssystem (oder dem Fenstermanager) gewandert.
Evtl. wirst du noch auf Mikrocontrollern mit einem grafischen LCD und entsprechender Bibliothek fündig.
Was willst du letztendlich machen/darstellen.
- Bilder (zb. von Phozoshop/Paint)
- Grafiken (CAD, Inkscape)
- Plots/Charts (wie in Excel)
- Videos
-
@DirkB sagte in Wie erstellt man einfache Grafiken?:
Was willst du letztendlich machen/darstellen.
- Bilder (zb. von Phozoshop/Paint)
- Grafiken (CAD, Inkscape)
- Plots/Charts (wie in Excel)
- Videos
Z. B. Funktionsgraphen oder andere Muster, die sich ähnlich einfach beschreiben lassen. Vielleicht auch einfache aus so etwas gebildete Bewegtbilder, aber keine "richtigen" Fotos oder Videos.
Das ganze sollte innerhalb von Programmen ohne graphische Benutzeroberfläche funktionieren, vielleicht z. B. in der Art, daß man mithilfe des anderswo erwähnten "ncurses" die Bildschirmanzeige unterteilt und in einem der Teile dann eine Grafik erzeugen kann.@wob sagte in Wie erstellt man einfache Grafiken?:
Für C fällt mir z.B. https://www.gtk.org/ ein. Eine andere Grafikbibliothek für C ist https://www.libsdl.org/ ein (aber ich habe außer mit Qt keine Erfahrungen!)
Auf den ersten Blick sieht das alles so aus, als sei es für das Erstellen grafischer Benutzeroberflächen und Arbeiten innerhalb solcher gedacht. Ist das so? Falls ja, was nimmt man, wenn keine grafische Benutzeroberfläche erzeugt werden soll?
-
Mach es erst einmal als Text. Das wäre ungefähr die gleiche Vorgehensweise, und dann kannst du das später auf "richtige" Grafik hochskalieren. Dann kannst du nach Programmierung der Textausgabe einschätzen, ob du das Projekt überhaupt noch weiter führen möchtest.
-
@Ein-Gast: Grafiken in der Windows Konsole? Dann schau dir mal das C++ Projekt Table and Graph Libraries (bes. ab Graphs/Plots) an.
Ein einfacheres, nur in C, gibt es unter ConsoleGraphics, auch direkt mit einer drawpixel-Funktion.