Bmp in VC ohne MFC lesen

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.

was möchtest du genau??

cu

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

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 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

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 :wink:

MfG
Frank

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

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]