hdc in buffer kopieren
-
Hi,
Meine Idee ist folgende:
In eine Bitmap einen Text einzufuegen.Mache ich also:
// die hBitmap erzeugen
hBitmap = CreateDIBitmap(hdc, ...// Memory Context erzeugen
hMemDC = CreateCompatibleDC(hdc);... hier fuege ich einen Text mit der DrawText ein ...
// und jetzt will ich ganz einfach das Inhalt des Memory context wieder in DIB kopieren. Wenn ich jedes Pixel mit der GetPixel aus dem Speicher ausnehme und in die Bild-Daten kopiere, ist alles in Ordnung - kopiere ich dann nur die Bild-Daten. Wenn ich jedoch die ganze Speicher (hMemDC) mit der GetDIBits in eine DIB kopieren will, dann wird die Farbpalette und die Bild-Daten komisch geaendert.
res = GetDIBits(hMemDC, hBitmap, 0, myBH->biHeight, myImage, (LPBITMAPINFO) myBH, DIB_RGB_COLORS);
???
Heniek
-
Wenn du eine Palette hast, warum nimmst du dann DIB_RGB_COLORS und nicht DIB_PAL_COLORS - vielleicht hilft das ja schon
-
Leider hilft es nicht. DIB_RGB_COLORS oder DIB_PAL_COLORS beschrift nur die Weise, wie die Farbpalette in BITMAPINFO dargestellt wird.
-
Sehe es jetzt erst:
If the requested format for the DIB matches its internal format, the RGB values for the bitmap are copied. If the requested format doesn't match the internal format, a color table is synthesized.
-
könntest du mal noch ein bisschen mehr code posten?
das bitmap darf nicht in einen dc selected sein, wenn du getdibits aufrufst, sonst bekommst du keine ausgabe in den puffer
bye
-
Ja, schoen, aber was es eigentlich bedeutet? Wie seht es in Praxis aus?
-
Hi,
Mache ich ganz einfach so:
In myImage befinden sich meine Bilddaten und in myBH ist BITMAPINFO mit Farbtabelle.
HBITMAP bmp = CreateDIBitmap(hDC, myBH, CBM_INIT, myImage, (LPBITMAPINFO) myBH, DIB_RGB_COLORS);
HDC mem = CreateCompatibleDC(hDC);HBITMAP oldBmp = (HBITMAP) SelectObject(mem, bmp);
res = GetDIBits(mem, hBitmap, 0, myBH->biHeight, myImage, (LPBITMAPINFO) myBH, DIB_RGB_COLORS);
Mit dieser Code normalerweise soll ich wieder nich geaendertes Bitmap bekommen. Die in myBH definierte Farbtabelle indexe sollen nich geaendert werden. Nach diese Operation bekomme ich jedoch eine andere Farbtabelle und eine andere Bilddaten (in my Image). Ich weiss es nicht, ob Du mich gut verstanden hast, versuch mal vielleicht es selbst zu testen.
MFG
Heniek
-
Wozu machst du das mit CreateCompatibleDC(hDC)? Wenn du eh schon in hDC in Handle hast kannst du doch auch gleich dieses verwenden
-
Hi,
Leider hab ich noch nicht mein Problem ausgeloest. Es geht darum, dass die Funktion GetDibits ersetzt die Farbtabelle auf eine Systemtabelle und passt dafuer die Bilddaten. Ich will aber so nicht. Ich moechte die Farbtabelle so lassen, wie ich sie frueher festgestellt hab und die Bilddaten nicht aendern.
Was mach ueberhaupt die Funktion GetDIBits. Die kopiert nicht genau die Pixel aus hMemory (HDC) nach ein Puffer (bei mir). Was ist los?
-
Vielleicht hilft es einfach anschließend mit SetDIBColorTable die Farbtabelle wieder zu setzen