hdc in Byte Array kopieren?
-
Hi all,
ich habe ein hdc gegeben. Dies wird "bemalt" und dann möchte ich es in ein Byte Array kopieren, um es auf meiner Textur darzustellen.
Meine Frage ist jetzt wie kann ich den Inhalt des hdc in ein Byte Array kopieren?
MfG
Scarabol
-
memcpy?
-
Also kann ich einfach "memcpy(hdc, targetbuffer, size)" aufrufen und das war alles?
MfG
Scarabol
-
da spricht nix dagegen

-
Nein, das geht natürlich nicht.
HDC ist nur ein Handle. Du müsstest bspw. ein Bitmap erstellen, deine Zeichenoperationen an diesem Bitmap vornehmen und es schließlich über deiner Textur blitten (einen passenden Rop2 musst du suchen).
Edit:
"da spricht nix dagegen
" 
-
Aber was mach ich dann falsch?
HRESULT hr = S_OK; HDC hDC = ::CreateCompatibleDC(NULL); HDC cdc = ::CreateCompatibleDC(hDC); HBITMAP hbm = CreateBitmap(mWidth, mHeight, 4, 8, NULL); HBITMAP hbmold = (HBITMAP)SelectObject(cdc, hbm); RECT aRect = {0, 0, mWidth, mHeight}; ::FillRect(hDC, &aRect, CreateSolidBrush(RGB(192,192,192))); BitBlt(cdc, 0, 0, mWidth, mHeight, hDC, 0, 0, SRCCOPY); SelectObject(cdc, hbmold); int iRes = GetDIBits(cdc, hbm, 0, mHeight, (void*)&bitmap_pData, &bitmap_pbi, DIB_RGB_COLORS); LPVOID targetPizels = targetNode->getMaterial(0).TextureLayer[0].Texture->lock(); memcpy(targetPizels, bitmap_pData, mWidth*mHeight/**4*/); targetNode->getMaterial(0).TextureLayer[0].Texture->unlock(); ::DeleteDC(hDC); mFlashDirty = false;MfG
Scarabol
-
GetDIBits gibt immer 0 zurück...
MfG
Scarabol
-
Um GetDIBits nutzen zu können, musst du auch ein device independent bitmap (DIB) erstellen.
Such mal im Netz nach CreateDIBSection.
Ausführlich erklärt ist das alles im legendären Petzold-Buch "Windowsprogrammierung" (gebraucht bei Amazon ab 13,85).
-
Ich habe mir gerade noch einmal deinen Code etwas genauer durchgelesen.
Was genau hast du eigentlich vor?
Warum möchtest du in einen DC zeichnen, nur um anschließend diesen in irgendeine Textur zu zeichnen?
Du kannst doch den Speicher der Textur direkt manipulieren.
-
Ich möchte in das DC mit einer anderen Bibliothek etwas reinzeichnen, diese kann leider "nur" in ein DC zeichnen also nicht direkt in die Texture...
PS
Das Thema kann geschlossen werden, ich hatte den falschen Pfad zu einer Datei angegeben und mein Error Handling hat leider komplett versagt, sodass ich den Fehler eben erst entdeckt hab...MfG
Scarabol