C++ - Erstellung von Bild -
Habe ich noch nicht die Programmierung in C++ für eine Weile, und jetzt habe ich zu schreiben, eine einfache Sache, aber es treibt mich in den Wahnsinn.
Muss ich erstellen Sie eine bitmap aus einer Tabelle von Farben:
char image[200][200][3];
Erste Koordinate ist Breite, die zweite die Höhe, die Dritte-Farben: RGB. Wie es zu tun?
Vielen Dank für jede Hilfe.
Adam
- Welche Datei-format? Was OS oder Bibliotheken verwenden Sie?
- Ich bin mit Windows, einfache Visual Studio Win32-Anwendung.
- Fragen Sie über einen Windows-GDI-BITMAP, oder ein .bmp-Datei?
- Ich würde gerne eine einfache .bmp-Datei.
- OK, ich werde versuchen, die option mit dem setzen der Header. Aber gibt es wirklich keine einfache Möglichkeit, das erstellen einer bitmap-Datei: nur die Einstellung der pixel-Farbwerte und als Datei speichern?
- Das ist ganz einfach. Erstellen Sie zwei Strukturen, füllen diese mit Daten, schreiben Sie, schreiben Sie dann die pixel-Daten. Das einzige, was einfacher als ein BMP ist wohl ein PPM-oder RAW-Datei.
- Irgendwie lame, ist es nicht? Sie haben LoadBitmap für das laden einer BMP -, aber nichts für das speichern einer.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin sicher, du hast schon überprüft http://en.wikipedia.org/wiki/BMP_file_format.
Mit diesen Informationen in der hand können wir schreiben eine schnelle BMP mit:
Wenn die Einrichtung der Header ist ein problem, lassen Sie es uns wissen.
Edit: ich habe vergessen, BMP-Dateien erwarten, dass die BGR anstatt RGB, ich habe aktualisiert, der code (überrascht, niemand hat es erwischt).
Ich würde vorschlagen,ImageMagick, umfassende Bibliothek etc.
Ich würde erstmal versuchen, herauszufinden, wie die BMP-Datei-format (das ist, was du meinst, wenn du eine bitmap, oder?) definiert ist. Dann würde ich konvertieren Sie das array zu formatieren und drucken Sie die Datei aus.
Wenn das ist eine option, ich würde auch prüfen, versuchen zu finden, eine vorhandene Bibliothek, die BMP-Dateien der Schöpfung, und es einfach verwenden.
Sorry, wenn das, was ich sagte, ist schon jetzt offensichtlich für Sie, aber ich weiß nicht, auf welcher Stufe des Prozesses Sie stecken.
Wäre es ratsam, zur Initialisierung der Funktion ein einfaches 1-dimensionales array.
ie (Wo der bytes ist die Anzahl der bytes pro pixel)
Kann dann auf die entsprechende position im array wie folgt
char image[width][height][bytes];
haben und GENAU wissen, was Los ist. Je nach "Sie wird optimiert, trotzdem" scheint das einzige zu sein black-box hier. Und es ist NICHT einfacher, zu sehen, was Los ist, wie es scheint, 'x' ist dominant über y ' (einschließlich in Ihrem Initialisierung), aber was Sie tatsächlich tun, ist mehr wieimage[height][width][bytes]
! Dies kann zu subtilen Fehlern führen.Für einfache Bild-Operationen, die ich sehr empfehlen Cimg. Diese Bibliothek funktioniert wie ein Charme, und ist extrem einfach zu bedienen. Sie müssen nur, um eine header-Datei in Ihrem code. Es buchstäblich dauerte weniger als 10 Minuten zu kompilieren und zu testen.
Wenn Sie wollen mehr tun, komplizierte Bild-Operationen jedoch, würde ich mit Magick++ wie vorgeschlagen von dagoof.