HBITMAP bei DC Erstellung kann nicht angesprochen werden



  • FrEak33 schrieb:

    Sind eig. die restlichen 8 Bit der Alpha-wert?

    32-Bit entsprechen 16,7 Millionen Farben...da sind die Alpha-Werte auch drin 😉 .

    FrEak33 schrieb:

    Kennt jemand evt. hierbei eine gute Lösung?

    Jo du kannst deine 32er-Bit-Bitmap^^ in ne 24-Bit Bitmap konvertieren.
    Dazu brauchte IMHO BITMAPINFOHEADER für.



  • Hmm. .. Wollte über GetDIBits() die Pixel von meinem Buffer holen, leider schlägt das immer fehl - die funktion gibt mit einfach keinen pointer auf einen speicher. Genauso bekomm ich invalide ergebnisse bei CreateDIBSection().



  • Bei GetDIBits musst du einen Pointer auf einen Speicher von dir übergeben. Da werden die Daten dann reinkopiert. Reine Vorsichtsmaßnahme von Windows^^

    Soweit ich weiß, funktioniert GetBitmapBits auch. Soll man nicht mehr benutzen (warum auch immer...), aber solange es funkioniert 😃



  • Also bei mir klappt auch GetBitmapBits nicht 🙂

    void *pBits=NULL;
    	int read=0;
            // 100x100 32 bit 
    	if( (read=GetBitmapBits( hBmp, (100*100)*4, &pBits )) > 0 )
    	{
    		printf( "\n Success" );
    	}
    


  • struct SCOLOR32
            {
                UCHAR R, G, B, A;
            };
    
            ...
    
    	SCOLOR32* pBits = new SCOLOR32 [ 100*100 ];
    	int read=0;
            // 100x100 32 bit 
    	if( (read=GetBitmapBits( hBmp, (100*100)*4, pBits )) > 0 )
    	{
    		printf( "\n Success" );
                    ...
    	}
            delete [] pBits;
    

    EDIT: ...



  • Muss dat nit SCOLOR32* pBits = new SCOLOR32 [ 100*100 ] heißen ?^^



  • Oh, hast recht 😮
    Editier ich schnell, vielleicht hat ers noch nicht gelesen 😉

    Danke 👍



  • Besten Dank. Dachte der pointer wird von der funktion erstellt.



  • Soo.. also habe leider grundelegende Probleme mit GetBitmapBits(), wobei ich denke das liegt eher an den Pointern.

    Ich habe zwei weiße Bitmaps. Bei einem sind in x und y Richtung 3*3=9 Pixel rot.
    Ich möchte jetzt jeden Pixel überprüfen und alle, die nicht gleich sind ausgeben.

    int cmp_count=0;
        for( int iY=0; iY < bmSrc.bmWidth; iY++ )
        {
            printf( "\nNew Line");
    		for( int iX=0; iX < bmSrc.bmWidth; iX++ )
    		{
    
                BMP_COLOR24 clr_src = ((BMP_COLOR24*)lpBitsSrc)[iY*bmSrc.bmWidth+iX];
                BMP_COLOR24 clr_cmp = ((BMP_COLOR24*)lpBitsCmp)[iY*bmCmp.bmWidth+iX];
    
                if( clr_src.R == clr_cmp.R &&
                    clr_src.G == clr_cmp.G &&
                    clr_src.B == clr_cmp.B )
                {
    				cmp_count++;
                }
                else
                {
                    printf( "\n%d, %d",  iX, iY );
                    break;
                }
    		}//for
    	}//for
    

    Ausgabe: (NUR 3!!!)

    New Line
    0,0
    New Line
    0,1
    New Line
    0,2

    Eigentlich müssten es 6 sein. 🙄 🙄



  • Keiner Eine Ahnung? 🙄 🙄 🙄



  • Hatte alles seine Richtigkeit. lag an einem Problem meinerseits.



  • Achja, es wurden nicht alle Pixel ausgegeben, da die Vergleich durch ein break; unterbrochen wurde, sobald die ersten nicht gleich sind.
    Also immer aufpassen! Und nochmals besten Dank an alle, die an diesem Thread mitgewirkt haben. 👍


Anmelden zum Antworten