Komplettes Bitmap von einem CBitmap-Objekt in Anderes kopieren
-
Ich habe in meiner Anwendung zwei CBitmap-Objekte. Eines enthält ein Bild was ich in meinem Dialogfeld zeichne.
Jetzt möchte ich das komplette Bild in ein anderes CBitmap-Objekt kopieren.
So in der Art wie:
CBitmap bObj1, bObj2; // Bitmap in "bObj1" laden ... bObj2 = bObj1; // Geht leider nichtich meine nicht:
CBitmap bObj1, *bObj2; bObj2 = &bObj1;Kann man das irgendwie hinkriegen ? Kenne leider keine geeigneten Funktionen für soetwas
-
ein einfacher Blick in die Hilfe bringt manchmal Wunder

CBitmap bObj1, bObj2; BITMAP* copyBmp; // irgendwas mit bObj1 machen copyBmp = bObj1.GetBitmap(copyBmp); // BITMAP Struktur in zweites Obj laden bObj2.LoadBitmapIndirect(copyBmp);zumindest müsste es etwa so gehen

-
danke erst mal.
da es LoadBitmapIndirect() nicht geibt, habe ich es mit CreateBitmapIndirect() ausprobiert, was aber auch fehlgeschlagen ist. mein code sieht so aus:
CBitmap bBmp1, bBmp2; BITMAP bBmpTmp; // bBmp1 laden ... if (bBmp1.GetBitmap(bBmpTmp) != 0) bBmp2.CreateBitmapIndirect(bBmpTmp);
-
CreateBitmapIndirect(..) ist richtig... da hatte ich mich verschrieben.
Du musst aber die Variable bBmpTmp als Pointer benutzen.
also:BITMAP* bBmpTmp; CBitmap bBmp1, bBmp2; // bBmp1 laden ... if (bBmp1.GetBitmap(bBmpTmp) != 0) bBmp2.CreateBitmapIndirect(bBmpTmp);oder
BITMAP bBmpTmp; CBitmap bBmp1, bBmp2; // bBmp1 laden ... if (bBmp1.GetBitmap(&bBmpTmp) != 0) bBmp2.CreateBitmapIndirect(&bBmpTmp);
-
Ach ja, klar mit dem Pointer -.-
Aber es klappt leider nicht

Das neu Bitmap ist nur schwarz !?
-
was genau willst du denn machen? willst du die bilder anzeigen?
-
Wie währe folgendes
BITMAP bm; ::GetObject(hBitmapSrc,sizeof(BITMAP), (LPSTR)&bm); DWORD *pPixels = (DWORD*)new BYTE[ bm.bmWidthBytes*bm.bmHeight ]; LONG dwValue=::GetBitmapBits(hBitmapSrc,bm.bmWidthBytes*bm.bmHeight,pPixels); if(dwValue == bm.bmWidthBytes*bm.bmHeight) { CBitmap::CreateBitmap(bm.bmWidth,bm.bmHeight,bm.bmPlanes,bm.bmBitsPixel,pPixels); } delete pPixels;ist zwar API aber sollte läßt sich mit wenig aufwand auf MFC (CBitmap) anpassen
Gruß Matthias
-
danke, ist glaube ich eine gute lösung.
nur lässt sich das bitmap so nicht erstellen. ich vermute das ich noch etwas anderes machen muss.
bis in die klammer komme ich, das bitmap will ich so erzeugen:
CBitmap *bDragImage = new CBitmap(); bDragImage->CreateBitmap(bm.bmWidth, bm.bmHeight, bm.bmPlanes, bm.bmBitsPixel, pPixels);ich erhalte aber nur ein schwarzes bitmap !?
-
Mit folgendem code kann man ohne CDC eine kopie eines CBitmap-Objektes erzeugen:
CBitmap BitmapSrc
//TODO: BitmapSrc Initialisierung (Z.b. Durch Überladung von CBitmap.Create())BITMAP BitMap;
BitampSrc.GetBitmap(&Bitmap);
DWORD sz = Bitmap.bmHeight * Bitmap.bmWidthBytes;
Bitmap.bmBits = malloc(sz);
BitmapSrc.GetBitmapBits(sz, Bitmap.bmBits);CBitmap BitmapCopy;
bmp.CreateBitmapIndirect(&Bitmap);free(Bitmap.bmBits);
-
Mit folgendem code kann man ohne CDC eine kopie eines CBitmap-Objektes erzeugen:
CBitmap BitmapSrc
//TODO: BitmapSrc Initialisierung (Z.b. Durch Überladung von CBitmap.Create())BITMAP BitMap;
BitampSrc.GetBitmap(&Bitmap);
DWORD sz = Bitmap.bmHeight * Bitmap.bmWidthBytes;
Bitmap.bmBits = malloc(sz);
BitmapSrc.GetBitmapBits(sz, Bitmap.bmBits);CBitmap BitmapCopy;
BitmapCopy.CreateBitmapIndirect(&Bitmap);free(Bitmap.bmBits);