Bilder Byte Manipulation



  • Hallo,

    ich moechte gern auf der Byte Ebene auf ein Bitmap zugreifen und mir die jeweiligen Pixel informationen anzeigen lassen!

    static HBITMAP      hBitMap;
    static BITMAP        bitmap ;
    COLORREF xxx;
    // ...
                            xxx =GetPixel(hBitMap, 17,32);
                            unsigned char xxxR = GetRValue(xxx);
                            unsigned char xxxG = GetGValue(xxx);
                            unsigned char xxxB = GetBValue(xxx);
    

    Sollte ich nun nicht auf die Farbinformation an dem Pixel(17/32) zugreifen koennen!?



  • Du musst wohl erst einen MemoryDC erstellen (CreateCompatibleDC) und dort das Bitmap mit SelectObject hineinselektieren. Diesen DC kannst du dann bei GetPixel angeben.

    Wenn du auf sehr viele Pixeldaten zugreifen willst, gibt es aber effizientere Lösungen...



  • Ja, ich will einen Linescan einer Zeile in einem Funktionsgraphen zeichnenlassen... Wobei der Benutzer die Zeile angeben kann...

    Welche Moeglichkeiten wuerden sich mir anbieten?



  • Ich glaube das du die Breite und Höhe von die Abbildung kann erhalten und dan ein Leine fragen.

    Die erste pixel von die Zeile ist:
    (Breite * Leine)

    Und:
    for(int i = 0; i < Breite; i++)
    // erhalte die Pixels

    Oder, meinst du etwas anders? Ich bin so slecht in Deutch 🤡.



  • Soweit funktioniert alles 🙂

    Wie wird das relaisiert, soblad ein Element in der Listbox (Angabe der Zeile) ausgewaehlt wird, dass er etwas Zeichnet? Also nach einem "LBN_SELCHANGE" der Listbox soll etwas gezeichnet werden...



  • Sorry, kannst du ein Vorbild geben? Ich verstande dich nicht gut... wass ist dir Problem?



  • escapete schrieb:

    Wie wird das relaisiert, soblad ein Element in der Listbox (Angabe der Zeile) ausgewaehlt wird, dass er etwas Zeichnet? Also nach einem "LBN_SELCHANGE" der Listbox soll etwas gezeichnet werden...

    in WM_PAINT sollte alles zum zeichnen stehen und mittels UpdateWindow() zeichnest du neu
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/pantdraw_4zef.asp

    performance tipp:
    ich würde die rohen pixeldaten in ein array laden,
    siehe zb: http://www.gamedev.net/reference/articles/article1966.asp



  • E-Coder schrieb:

    Sorry, kannst du ein Vorbild geben? Ich verstande dich nicht gut... wass ist dir Problem?

    Das Programm soll folgendes koennen

    a) Bild laden - done
    b) Bild auf eine bestimme groeße skalieren - done
    c) User kann sich eine Zeile aussuchen - done
    d) RGB bzw. Grauwert wird in Abhaengigkeit wird fuer eine ganze Zeile angezeigt in einem Diagramm - in work
    e) Ausgesuchter RGB bzw. Grauwert RGB(X,Y) wird in einem label angezeigt - done

    Die Original Aufgabenstellung lautet:
    "Über ein Datei – öffnen Menü (alternativ Eingabe des Dateinamens in einem Edit Fenster) wird eine Bilddatei ausgewählt und in einem Fenster im Formular dargestellt. In diesem Fenster soll die Möglichkeit bestehen, eine beliebige Bildzeile auszuwählen z.B. über eine farbige Linie, die über das Bild verschoben werden kann. Die zugehörige Zeilennummer soll angezeigt werden. In einem weiteren Fenster im Formular soll die Grauwertverteilung entlang der markierten Zeile in Form eines x – y Diagramms dargestellt werden, wobei entlang der x – Achse der Zeilenindex und entlang der y – Achse der Grauwert aufgetragen wird. Zusätzlich soll die Möglichkeit bestehen, einen beliebigen Punkt im Bild zu markieren und neben den Koordinaten des Bildpunktes den zugehörigen Grauwert anzuzeigen."

    Ist ein Thema fuer ein Seminar. Entschuldigt, aber ich hab mit den Winapi's mit Abstand das aufwendigeste Thema bekommen, wenn ich so sehe, dass einige von mir mit Visual Basic das selbe realisieren muessen... Vor allem hatte ich die kuerzeste Bearbeitungszeit fuer die Loesung des Programms. Naja, ich bin ja kurz vor der Loesung 😃


Log in to reply