RGB aus einer Bitmap(Festplatte) lesen



  • Hallo,

    kennt jemand eine Möglichkeit, aus einer Bitmap-Datei, die auf der Festplatte liegt Anzahl der Zeilen, Spalten und RGB Daten auszulesen?



  • HINSTANCE hinst = AfxGetInstanceHandle();
    HANDLE hndl = LoadImage(hinst, "c:\\tmp.bmp",IMAGE_BITMAP,0,0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
    CBitmap *backBmp = new CBitmap;
    backBmp->Attach(hndl);
    BITMAP bm;
    backBmp->GetBitmap(&bm)

    schon stehen alle Infos in der BITMAP struktur



  • Hi, das funktioniert, ist ein guter Anfang, nur wie lese ich jetzt den Rot, Grün und Blau Wert an der Stelle Zeile[i] und Spalte[i] aus. Keiner der möglichen Operatoren, die ich über bm... bekommen verweist auf den Inhalt!

    Danke für Hinweise



  • Die Pixel bekommst du so:

    int iNumImgBytes = bm.bmWidthBytes * bm.bmHeight;
    BYTE* pImgBytes = new BYTE[iNumImgBytes];
    backBmp->GetBitmapBits( iNumBytes, pImgBytes );

    So, nun stehen die kompletten Bildbytes in pImgBytes und zwar in der Reihenfolge BGR ( bisschen verquer 🙂 ). Mußte nu also nur noch auseinander dröseln:

    iByteDepth = bm.bmBitsPixel/8;
    for(int y = 0; y < bm.bmHeight; y++)
    for(int x = 0; x < bm.bmWidthBytes; x += iByteDepth)
    {
    int aktPos = (y * bm.bmWidthBytes) + x;
    int iRed = pImgBytes[aktPos+2];
    int iBlue = pImgBytes[aktPos];
    int iGreen = pImgBytes[aktPos+1];
    }



  • Besten Dank, das klappt!!



  • hallo ... das klingt sehr interessant ... geht das auch direkt für jpgs zu machen? oder kann man durch nen kleinen tricke vorher die jpgs in bmps umwandeln lassen?

    danke schonmal

    mfg, TFTS


Anmelden zum Antworten