Probleme mit LoadImage() / Bitmaps laden
-
Hallo,
und zwar bin ich gerade dabei ein Bitmap 24 Bits zu laden. Das ganze bewerkstellige ich mit der Funktion LoadImage().
Das Image ist 1x10 Pixel groß.
Und hat folgende Struktur (RGB)0/0/0 0/0/0 0/0/0 0/0/0 0/0/0 91/104/205 91/104/205 91/104/205 91/104/205 91/104/205So wenn ich aber das Bitmap lade halte ich Folgendes:
0/0/0 0/0/0 0/0/0 0/0/0 0/0/0 91/104/205 91/104/205 253/104/205 171/253/253 171/171/171Die ersten Bits scheinen wohl sauber geladen zu werten, irgendwann geht es aber schief.
Ich gehb euh einfach mal einen kleinen ausschnitt meines codes:
BITMAPINFO bmiSrc; BITMAP bmSrc; HBITMAP hLoaded = (HBITMAP)LoadImage( NULL, "c:\\test.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE ); if( !hLoaded ){ printf( "Error" ); getchar(); return 0; } GetObject( hLoaded, sizeof(BITMAPINFO), &bmiSrc ); GetObject( hLoaded, sizeof(BITMAP), &bmSrc ); DWORD dwImageSizeSrc = (bmiSrc.bmiHeader.biWidth*bmiSrc.bmiHeader.biHeight)*(bmSrc.bmBitsPixel/8); LPVOID lpBitsSrc = malloc( (bmiSrc.bmiHeader.biWidth*bmiSrc.bmiHeader.biHeight)*(bmSrc.bmBitsPixel/8)); if( GetBitmapBits( hLoaded, dwImageSizeSrc, lpBitsSrc ) == 0 ) { OutputDebugString( "\nERROR " ); return false; } for( int iY=0; iY < bmSrc.bmHeight; iY++ ) { for( int iX=0; iX < bmSrc.bmWidth; iX++ ) { DWORD dwColorSrc=0, dwColorCmp=0; dwColorSrc = ((DWORD*)lpBitsSrc)[iY*(bmSrc.bmWidthBytes/3)+iX]; BYTE r = (BYTE)((dwColorSrc & 0x00ff0000) >> 16); BYTE g = (BYTE)((dwColorSrc & 0x0000ff00) >> 8); BYTE b = (BYTE)((dwColorSrc & 0x000000ff)); printf( "%i/%i/%i ", r, g, b); } printf( "\n" ); } free( lpBitsSrc );Evt. sieht jemand von euch einen Fehler?
-
ALso bmSrc.bmWidthBytes hat den Wert 4.
Das sollte doch eine Bedeutung haben?

-
Hi, problem gefunden:
DWORD dwImageSizeSrc = (bmiSrc.bmiHeader.biWidth*bmiSrc.bmiHeader.biHeight)*4; LPVOID lpBitsSrc = malloc( dwImageSizeSrc );Das Problem lag daran, dass die Bildgröße falsch ausgelesen und teilweise auch falshc im Bitmap gespeichert ist.