[gelöst]RGB-Array ins Fenster kopieren



  • Hallöchen,

    mein Ziel ist es ein unsigned char Array mit den Werten für die Farben R,G und B in dieser Reihenfolgen in einem Fenster darzustellen, wenn möglich mit Skalierung da ich nur eine virtuelle Auflösung von 640x480 oder auch nur 320*256 auf den Schirm bringen möchte.

    Was wäre da die einfachste Lösung? Ich bekomme leider einen Knoten im Kopf mit den ganzen verschiedenen Funktionen fürs Blitten und DIBs.

    Kann mir wer helfen?

    Gruß Chris



  • RGB sind drei Integer-Zahlenwerte für rot-grün-blau, jweils von 0 bis 255. Was willst Du genau machen? Die Auflösung des Bildschirmes ist völlig uninteressant.
    Willst Du die Farben irgendwo einsetzen, z.B. in einem Child-Fenster, so ist WM_PAINT der richtige Ort. Alles weitere hat Charles Petzold beschrieben.



  • EDIT: war Quatsch...



  • berniebutt schrieb:

    RGB sind drei Integer-Zahlenwerte für rot-grün-blau, jweils von 0 bis 255. Was willst Du genau machen? Die Auflösung des Bildschirmes ist völlig uninteressant.
    Willst Du die Farben irgendwo einsetzen, z.B. in einem Child-Fenster, so ist WM_PAINT der richtige Ort. Alles weitere hat Charles Petzold beschrieben.

    Ich möchte sozusagen einen eigenen virtuellen Framebuffer in Form eines Array haben um darin alle möglichen 2D- und 3D-Grafikfunktionen selbst zu schreiben, es dient nur dem Lernen. Wenn ich dann mit all dem Berechnen und Setzen der Bytes im virtuellen Framebuffer fertig bin will ich diesen auch im Fenster anzeigen und zwar immer an die aktuelle Fenstergröße angepasst. Was bedeutet wenn ich eine kleine Auflösung für meinen VFramebuffer habe, sehen ich große Klötze als Bildpunkte wenn das Fenster groß ist.

    Wie schon gesagt alle Grafikmanipulationen möchte ich nur in dem eigenen Speicherbereich ausführen und ganz zum schluß durch Blitten diesen anzeigen.

    Wozu soll ich Integer nehmen? Ich brauche nur Werte von 0...255

    Gruß Chris



  • Für's Anpassen der Größe kannst du StretchBlt nehmen. Das staucht/streckt automatisch.

    3 int's ist natürlich Quatsch. In einem int kannst du 4 Kanäle (R,G,B,A) unterbringen.



  • Dann hattest Du die Frage zunächst unklar gestellt!
    Es geht also um selbst produzierte Grafikobjekte?

    Edit: Das Makro RGB der WinApi benutzt natürlich keine 32-bit-integers sondern bytes! Wo immer man es in WinApi-Funktionen mit Farben zu tun hat benutzt man auch nur das dafür vorgesehene Makro.



  • Ich habe es anscheinend etwas kompliziert beschrieben.

    Also nehme ich für den letzten Schritt StretchBlt und wie ich im MSDN gelesen habe brauche ich dann davor ein CreateDIBSection und dafür erstmal eine eigene BITMAPINFO. Ist das soweit korrekt?



  • justchris schrieb:

    Also nehme ich für den letzten Schritt StretchBlt und wie ich im MSDN gelesen habe brauche ich dann davor ein CreateDIBSection und dafür erstmal eine eigene BITMAPINFO. Ist das soweit korrekt?

    StretchBlt ist ok, doch braucht man dafür noch einiges mehr. Charles Petzold hat das alles auf vielen Seiten ausführlich beschrieben. Ich habe vor vielen Jahren alles notwendige übernommen und in eine eigene DLL gepackt. Seitdem kümmere ich mich nicht mehr darum, was im einzelnen erforderlich ist



  • Danke für die Tipps, ich habe es jetzt hin bekommen und wollte mal kurz die Reihenfolge hier aufzählen.

    - uchar rgb-array definieren
    - Bitmapinfo-Struktur mit der Header-Struktur passend selbst mit Daten füttern
    - eine Bitmap mithilfe von CreateDIBitmap daraus erstellen
    - einen kompatiblen Devicekontex mit CreateCompatibleDC erzeugen
    - Die Bitmap darin selektieren mit SelectObject
    - Die Bitmap mit StretchBlt in den aktiven DC kopieren


Anmelden zum Antworten