DIB - section von 24 bit nach 8 bit konvertieren
-
Tjo, das ist schon meine Frage, wie gehts am einfachsten ?
-
soll das ding ne eigene farb-palette miterstellen?
Ansonsten einfach ne 8bit dib erzeugen, beide in nen DC selectieren und die 24bit in die 8bit bliten
-
hmm.. etwas weiter ausführen kannste das nicht ?
Wie erzeuge ich denn die DIB ohne, dass ich Daten drin hab ???
-
Mit CreateDIBSection.
bsp:
HBITMAP DIB24toDIB8(HBITMAP hBmp24, int cx, int cy) { BITMAPINFO bmInfo8; memset(&bmInfo8,0,sizeof(BITMAPINFO)); bmInfo8.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmInfo8.bmiHeader.biWidth = cx; bmInfo8.bmiHeader.biHeight = cy; bmInfo8.bmiHeader.biPlanes = 1; bmInfo8.bmiHeader.biBitCount = 8; bmInfo8.bmiHeader.biCompression = BI_RGB; // erzeuge eine 8 bit DIB BYTE *pBits8=NULL; HBITMAP hBitmap8 = CreateDIBSection(NULL,&bmInfo8,DIB_RGB_COLORS,(void**)&pBits8,NULL,0); // selectiere die 8 bit DIB in einen DC HDC hDC8 = CreateCompatibleDC(NULL); HGDIOBJ hOldBmp8 = SelectObject(hDC8,hBitmap8); // selectiere die 24 bit DIB in nen DC HDC hDC24 = CreateCompatibleDC(hDC8); HGDIOBJ hOldBmp24 = SelectObject(hDC24,hBitmap24); // blite die DIB24 in die DIB8 // windows macht die frabraum konvertierung für dich StretchBlt(hDC8,0,0,cx,cy,hDC24,0,0,cx,cy,SRCCOPY); // Aufräumen SelectObject(hDC24,hOldBmp24); SelectObject(hDC8,hOldBmp8); DeleteDC(hDC24); DeleteDC(hDC8); return hBitmap8; }