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

    So 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/171
    

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


Anmelden zum Antworten