Frage

Ich möchte eine BMP-Datei laden, gehen Sie einige Operationen auf sie im Speicher und die Ausgabe einer neuen BMP-Datei mit C ++ unter Windows (Win32 unkomprimiert). Ich bin mir dessen bewusst ImageMagick und es ist C ++ Bindung Magick ++ , aber ich denke, es ist zuviel des Guten für dieses Projekt ist, da ich in anderen Dateiformaten oder Plattformen zur Zeit nicht interessiert bin.

Was wäre die einfachste Art und Weise in Form von Code eingerichtet werden BMP-Dateien zu lesen und schreiben? Die Antwort sein kann „nur Magick ++ verwenden, es ist die einfachste.“

Verwandte Frage: Was ist die beste Bibliothek zur Bildbearbeitung

War es hilfreich?

Lösung

Wenn nur für Windows zu entwickeln in der Regel verwende ich nur die ATL CImage Klasse

Andere Tipps

EasyBMP wenn Sie nur bmp Unterstützung möchten. I'ts einfach genug, um zu starten innerhalb von Minuten mit, und es ist Multi-Plattform, wenn Sie das brauchen würden.

Eine BMP-Datei besteht aus drei Strukturen. A BITMAPFILEHEADER gefolgt von einem BITMAP durch ein Array von Bytes, gefolgt.

Der absolute einfachste Weg, um eine BMP-Datei mit Win32 zu laden ist Createfile, GetFileSize, ReadFile- und Closehandle rufen Sie die Datei Bild in den Speicher zu laden, und dann warf nur einen Zeiger auf den Puffer zu einem BITMAPFILEHEADER und geht von dort aus.

Ich liege, ein einfacher Weg ist, Loadimage zu nennen. Sicherstellen, dass die LR_DIBSECTION Flagge passieren, um sicherzustellen, dass GDI das geladene Bild in dem, was bitdepth Ihre primäre Anzeige konfiguriert ist, konvertieren tut. Dies hat den Vorteil, dass Sie einen HBITMAP bekommen, die Sie in eine DC auswählen können und daher alle über mit GDI ziehen.

es jedoch zu speichern, es gibt keine Abkürzung. Sie benötigen einen BITMAPFILEHEADER herzustellen, schreiben Sie es aus, füllen in einer BITMAP Struktur, schreiben, dass, und dann die tatsächlichen Pixeldaten.

Die CBitmap Klasse tut BMP I /O.

#include <windows.h>

Loadimage

Ich habe nicht Magick ++ verwendet, aber Windows ist eine Bibliothek mit dem Namen des Windows Imaging Component hat, die Ihre Bedürfnisse wahrscheinlich passen würde.

Ich habe versucht CImage wie oben, aber ich hatte einen C-Array voll von Pixelwerten, die ich einfach als BMP (oder ein anderes Format) entleeren wollte. CImage hat keinen Konstruktor für das, und ich wollte nicht, MFC (für CBitmap) zu verbinden, noch versuchen IWIC zu ergründen.

Was war leicht war CImg :

#include <cimg/cimg.h>
using namespace cimg_library;
//...
void SaveMyData(uint8_t *pxarray, int width, int height)
{
    CImg<uint8_t> img(pxarray, width, height);
    img.save_bmp("sav.bmp");
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top