bmp in VC ohne MFC lesen

Von: , Frage gestellt am Di, 14. Sep 1999

Hallo,
Ich programmiere erst seit kurzem mit VC.
Ich suche nun eine möglichkeit ein RGB Bild unter VC ohne MFC zu lesen und auf die einzellnen Bytes zuzugreifen.
Ich wäre sehr dankbar, wenn mit jemand mit den nötigen paar Zeilen Code antworten könnte.

4 Antworten zu dieser Frage

  1. Antwort von nach einer Stunde hilfreich
    Re: bmp in VC ohne MFC lesen

    was möchtest du genau??

    cu [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

  2. Antwort von nach 10 Stunden hilfreich
    Re: bmp in VC ohne MFC lesen

    hi Timo !

    Wenn du auf jedes einzelne Byte in einem File zugreifen willst, öffnest du es im Binary Mode und liest in einer Schleife :
    z.B.:
    FILE fptr;

    if( !(fptr = fopen(name, "rb")))
    { // rb heißt : read binary
    printf("Die Datei <%s> konnte nicht geoeffnet werden\n", old_name);
    return;
    }
    int i, numread;
    char buf[5];
    static char zeile[200];

    while(true) // endlosschleife
    {

    for( i = 0; i < toread; i++)
    { //fread liest genau 1 byte vom file
    numread = fread(buf , sizeof( char ), 1, fptr );
    buf[1] = 0x00;
    }



    Ich hoffe das kleine Beispiel hilft dir. kann sein daß einige Variablen falsch sind. Aber versuchs mal.

    Ciao Mario

  3. Antwort von nach 16 Stunden hilfreich
    Re: bmp in VC ohne MFC lesen

    Wie schon beschrieben, mußt Du die BMP-Datei im binären Modus öffnen.
    Die Bilddaten sind jedoch nicht schon im ersten Byte enthalten, sondern kommen erst später, da erst ein paar Bildmetainformationen (der sogenannte Header) kommen.

    Nähere Informationen zu dem BMP-Datei Format (und nicht nur dazu!) findest Du unter http://www.wotsit.org/

    Wie Du dies jetzt in korrekten C Code umsetzt bleibt dem geneigten Leser als Fleißaufgabe überlassen ;-)

    MfG
    Frank [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

  4. Antwort von nach 5 Tagen hilfreich
    Re: bmp in VC ohne MFC lesen

    Hallo Timo,

    vielleicht hilft dir die API-Funktion LoadImage(...) mit dem Flag LR_CREATEDIBSECTION.
    Wenn du im MSDN nach diesem Flag suchst findest du auch einige Artikel mit Codebeispielen.

    Zur Einstimmung: diese Funktion liefert für ein DIB mit 256 Farben die Farbe des 1. Pixels zurück:

    COLORREF CAVICtrl::GetFirstPixelColor()
    {
    _ASSERTE(m_pAS);
    _ASSERTE(m_pGF);

    LPBITMAPINFO lpbi;

    // fetch first frame
    lpbi = (LPBITMAPINFO)AVIStreamGetFrame(m_pGF, 0);
    _ASSERTE(lpbi);

    // currently works only with 8bit-BMPs
    if (!lpbi || lpbi->bmiHeader.biBitCount != 8)
    {
    return LTGREEN;
    }

    // get first pixel and use as index in the color table
    LPBYTE lpbyIndex = (LPBYTE)((DWORD)lpbi + lpbi->bmiHeader.biSize + (lpbi->bmiHeader.biClrUsed*sizeof(RGBQUAD)));
    RGBQUAD* pRGBFirst = (RGBQUAD*)(&lpbi->bmiColors[*lpbyIndex]);

    return RGB(pRGBFirst->rgbRed, pRGBFirst->rgbGreen, pRGBFirst->rgbBlue);
    }


    Gruß Jens [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!