CreateDIBSection, probleme mit BitBlt()
-
Hallo,
und zwar hab ich jetzt mühsam meine Klasse CBmp zum laufen bekommen. Ich erstelle Mein HDC via CreateCompatibleDC() und erstelle via CreateDIBsection mein HBitmap. ICh kann wunderbar damit arbeiten, es füllen ...etc.
Nur wenn ich ein Bild Lade (LoadBitmap()) und dieses einemn temporäres DC zuweise, um es dann in mein "richtigen" HDC zu kopieren, wird nicht alles kopiert.
Er versucht immer ein Rechteck zu kopieren. aus 12x6 wird 6x6.
Der Speicher ist jedoch allokiert und ich kann auf den Speicher auch wunderbar zugreifen (wenn ich das per Hand mache).
Das Problem muss bei BitBlt liegen. Hat jemand eine Ahunung?
Etwas Code
// create local m_memDC = CreateCompatibleDC( dcWindow ); //m_hBitmap = CreateCompatibleBitmap( source_hdc, m_dwWidth, m_dwHeight ); BITMAPINFO lBitmapInfo = {0}; lBitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); lBitmapInfo.bmiHeader.biBitCount = m_dwBitsPerPixel; lBitmapInfo.bmiHeader.biWidth = m_dwWidth; lBitmapInfo.bmiHeader.biHeight = -m_dwHeight; lBitmapInfo.bmiHeader.biCompression = BI_RGB; lBitmapInfo.bmiHeader.biPlanes = 1; lBitmapInfo.bmiHeader.biClrUsed = 0; lBitmapInfo.bmiHeader.biClrImportant = 0; lBitmapInfo.bmiHeader.biSizeImage = m_dwHeight*m_dwWidth*(m_dwBitsPerPixel/8); // CREAETE BITMAP HBITMAP m_hBitmap = ::CreateDIBSection( m_memDC, &lBitmapInfo, DIB_RGB_COLORS, (void**)&m_lpBits, NULL, NULL ); if( !m_hBitmap ) { OutputDebugString("\nERROR: Couldn't create DIB Section in CBmp::CreateEmpty() "); return false; } // create dib sectopm HBITMAP m_hHDCOldBitmap = (HBITMAP)SelectObject( m_memDC, m_hBitmap ); // Copy BitBlt( m_memDC, 0, 0, m_dwHeight, m_dwWidth, dcImage, 0, 0, SRCCOPY );
-
Hast du bei BitBlt() mit Absicht dwHeight und dwWidth vertauscht?
-
Kaum zu glauben arber wahr. Das war das Problem. Besten Dank!