Aus RGB-Rohdaten Bild erstellen



  • Hey,
    ich denke der Titel erklärt schon viel.
    Ich habe in C++

    HDC dc = GetDC(NULL);
    COLORREF color = GetPixel(dc,pt.x,pt.y);
    cout << "R:" << toString(GetRValue(color)) << ",G:" << toString(GetGValue(color)) << ",B:" << toString(GetBValue(color)) << endl;
    ReleaseDC(0,dc);
    

    (toString ist von mir selbst implementiert und verwandelt einfach nur einen Integer in einen String, da ich sonst die ASCII-Zeichen bekommen würde, die ich nicht will)

    Das funktioniert auch alles wunderbar und ich werde daraus eine Methode schreiben, die ein bestimmtes Feld abgeht und alle RGB-Werte in ein Array speichert.
    (Wahrscheinlich einfach hintereinander)

    Meine Frage ist also, wie ich aus diesen RGB-Rohdaten ein fertiges Bild erstellen kann?
    (BMP vorzugsweise, weil ich gehört habe, dass dies sehr einfach sein soll, ansonsten geht aber auch jpg oder png)

    Und wird eigentlich das fertige Bild kleiner oder größer sein, als das Array mit den Rohdaten?

    Danke schonmal im Voraus 🙂

    Julius



  • bmp: siehe hier in der FAQ
    jpeg/png: Das ginge z.B. über WIC oder GDI+



  • OT, aber anstatt toString(GetRValue(color)) kannst du auch einfach casten:

    int(GetRValue(color))
    

    Dann wird der Ausgabeoperator für Zahlen aufgerufen und verwandelt von selber in einen String.



  • PanCave schrieb:

    Meine Frage ist also, wie ich aus diesen RGB-Rohdaten ein fertiges Bild erstellen kann?
    (BMP vorzugsweise, weil ich gehört habe, dass dies sehr einfach sein soll, ansonsten geht aber auch jpg oder png)

    Und wird eigentlich das fertige Bild kleiner oder größer sein, als das Array mit den Rohdaten?

    Zu den Daten kommt noch der Fileheader und der Infoheader hinzu.
    Je nach Zeilenlänge müssen noch Padding-Bytes hinzugefügt werden.

    Wenn die Daten unkomprimiert gespeichert werden wird die Datei insgesammt groesser als die Rohdaten.
    Für 24 Bit Farben sieht das BMP-Format soweit ich weiss keine Komprimierung vor die offiziell unterstützt wird.
    Wenn Komprimierung gefordert ist würde sich evtl. eher das TIF-Format anbieten.


Anmelden zum Antworten