Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Farbwerte aus BITMAP-Struktur auslesen???

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.09.2004, 11:59 Uhr
~hardixy
Gast


Hi,
ich möchte mein Bitmap pixelweise verändern, bevor ich es später ausgebe... dazu möchte ich an jeder Stelle im Bild die Farbwerte lesen und danach veränderte Farbwerte setzen. Ich möchte noch weitere Funktionen mit dem Bild machen und es anschliessend speichern, daher die Manipulation direkt in der BITMAP-Struktur.

Das nachfolgende Programm läd das Bild gibt es auf dem Bildschirm aus, was mir natürlich nicht reicht. So nun seid ihr dran... ich komme nämlich nicht weiter.

Ahoi, hardixy


C++:
    BITMAP bmp;
    HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, "meinBild.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    PBITMAPINFO pbi = CreateBitmapInfoStruct(hWnd, hBitmap);  
    PBITMAPINFOHEADER pbih = (PBITMAPINFOHEADER) pbi;
    LPBYTE lpBits;              /* zeigt auf die Bilddaten */


    //Speicher für Bilddaten wird reserviert
    lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, pbih->biSizeImage);

    //Farbwerte von Bild werden in Buffer geschrieben
    GetDIBits(hDC, hBitmap, 0, (WORD) pbih->biHeight, lpBits, pbi, DIB_RGB_COLORS);

    //Bildinformationen werden nun lesbar...über Variable bmp
    GetObject(hBitmap, sizeof(bmp), &bmp);

    //Bild in Gerätekontext laden
    HDC hBitmapDC = CreateCompatibleDC(hDC);
    SelectObject(hBitmapDC, hBitmap);
    
    //Art der Kompression einstellbar
    SetStretchBltMode(hDC, COLORONCOLOR);
    
    StretchDIBits(    hDC,
                    0, 0, bildlaenge, bildhoehe,
                    0, 0, bmp.bmWidth, bmp.bmHeight,
                    lpBits, pbi, DIB_RGB_COLORS, SRCCOPY);
    }




Bearbeitung von typecast:
cpp-Tags gesetzt

Dieser Post wurde am 01.10.2004 um 00:00 Uhr von typecast editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.09.2004, 15:05 Uhr
Oliver
S2-Pixelgeneral


Ähm, probiers doch mal mit SetPixel und GetPixel...
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.09.2004, 13:36 Uhr
~hardixy
Gast


Diesen Eintrag betrachte ich als Scherz...da diese Funktionen nicht auf die BITMAP-Struktur anwendbar sind.

Einen Ansatz habe ich schon:
Die Bilddaten sind ab Speicherplatz lpBits abgelegt. Ich kenne jedoch die Reihenfolge von RGB-Werten nicht. Ist der erste gespeicherte Farbwert von oben/unten links/rechts???
Vielleicht kennt sich damit einer aus...

Hoffe auf weitere Vorschläge
hardixy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.09.2004, 13:44 Uhr
Tommix



Hallo,
das erste Pixel ist links. Ob oben oder unten, ergint sich aus dem Header:

Zitat von MSDN (BITMAPINFOHEADER):

biHeight
Specifies the height of the bitmap, in pixels. If biHeight is positive, the bitmap is a bottom-up DIB and its origin is the lower-left corner. If biHeight is negative, the bitmap is a top-down DIB and its origin is the upper-left corner.


Ich mach mir für sowas immer ein kleines Testbild, 16x16 oder so. Alles schwarz, ein Eckpixel rot, eins grün usw.

Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.09.2004, 23:03 Uhr
~hardixy
Gast


danke für den tipp, werde gleich mal probieren.
poste morgen meine erfolge
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: