HBITMAP bei DC Erstellung kann nicht angesprochen werden
-
Also, es liegt daran, dass ich einmal einen 24 Bit DC und einmal einen 32 Bit DC (vom desktop) habe.
Ich dachte mir hierbei, hey vergleichste RGB mit GetPixel und gut ist (egal ob 24 oder 32 bit).
Naja nun hab ich festgestellt, dass die GetPixel Funktion nicht bei einem 32 Bit DC funktioniert... (kommt -1 bei jedem Pixel).Sind eig. die restlichen 8 Bit der Alpha-wert?
Kennt jemand evt. hierbei eine gute Lösung?
-
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 }//forAusgabe: (NUR 3!!!)
New Line
0,0
New Line
0,1
New Line
0,2Eigentlich 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.