BOOL CClientCapture::WriteBitmapToDIB( CDC* dc, CBitmap &bitmap) { // Create logical palette if device support a palette if( dc->GetDeviceCaps(RASTERCAPS) & RC_PALETTE ) { UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * 256); LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize]; pLP->palVersion = 0x300; pLP->palNumEntries = GetSystemPaletteEntries( *dc, 0, 255, pLP->palPalEntry ); // Create the palette pal.CreatePalette( pLP ); delete[] pLP; } // Convert the bitmap to a DIB hDIB = DDBToDIB(bitmap, BI_RGB, &pal, dc); if( hDIB == NULL ) return FALSE; return TRUE; }
void CImageWindow::Screenshot(BOOL bShotImage, BOOL bShotROI, LPCTSTR szFilePath) { m_pImpl->Screenshot(bShotImage, bShotROI, __ddbScreenshot); HANDLE hDIB = DDBToDIB(m_pImpl->GetDC(), __ddbScreenshot, NULL); if( !hDIB ) return; WriteDIB(szFilePath, hDIB); ::GlobalFree(hDIB); }
BOOL WriteWindow2Mem(BYTE* buf, int W, int H, HDC hDC) { CBitmap bitmap; CDC memDC; CRect rect; CDC dc; dc.Attach(hDC); CDC* pDC = &dc; bitmap.CreateCompatibleBitmap(pDC, W,H ); CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); memDC.BitBlt(0, 0, W,H, pDC, 0, 0, SRCCOPY); // Create logical palette if device support a palette CPalette pal; if( pDC->GetDeviceCaps(RASTERCAPS) & RC_PALETTE ) { UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * 256); LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize]; pLP->palVersion = 0x300; pLP->palNumEntries = ::GetSystemPaletteEntries( *pDC, 0, 255, pLP->palPalEntry ); // Create the palette pal.CreatePalette( pLP ); delete[] pLP; } memDC.SelectObject(pOldBitmap); // Convert the bitmap to a DIB HANDLE hDIB = DDBToDIB( bitmap, BI_RGB, &pal ); if( hDIB == NULL ) return FALSE; // Write it to file WriteDIB2Mem(hDIB, W, H, buf); // Free the memory allocated by DDBToDIB for the DIB GlobalFree( hDIB ); dc.Detach(); return TRUE; }
BOOL CClientCapture::WriteWindowToDIB( CDC* dc, CRect rect) { CBitmap bitmap; CDC memDC; memDC.CreateCompatibleDC(dc); bitmap.CreateCompatibleBitmap(dc, rect.Width(),rect.Height() ); CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); memDC.BitBlt(0, 0, rect.Width(),rect.Height(), dc, 0, 0, SRCCOPY); // Create logical palette if device support a palette if( dc->GetDeviceCaps(RASTERCAPS) & RC_PALETTE ) { UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * 256); LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize]; pLP->palVersion = 0x300; pLP->palNumEntries = GetSystemPaletteEntries( *dc, 0, 255, pLP->palPalEntry ); // Create the palette pal.CreatePalette( pLP ); delete[] pLP; } memDC.SelectObject(pOldBitmap); // Convert the bitmap to a DIB hDIB = DDBToDIB( bitmap, BI_RGB, &pal, dc); if( hDIB == NULL ) return FALSE; return TRUE; }
BOOL _XHTMLWrapper::LoadHTML( LPTSTR szURLString, int imaxWidth ) { #ifndef _XDEF_ENABLEQHTMWRAPPER return TRUE; #endif TCHAR urlstring[_XDEF_MAX_URLSTRINGLENGTH]; memset( urlstring, 0, sizeof( TCHAR ) * _XDEF_MAX_URLSTRINGLENGTH ); if( !CheckExistFile( szURLString ) ) { strcpy( urlstring, gModulePath ); strcat( urlstring, _T("\\HelpSystem\\error.html") ); if( !CheckExistFile( urlstring ) ) { return FALSE; } } else { strcpy( urlstring, szURLString ); } if( strcmpi( m_LastBuildURLAdress, urlstring ) == 0 ) { return TRUE; } memset( m_LastBuildURLAdress, 0, sizeof(TCHAR) * _XDEF_MAX_URLSTRINGLENGTH ); strcpy( m_LastBuildURLAdress, urlstring ); m_LastBuildScrollPos = -1; HDC hdcWindow = ::GetDC( gHWnd ); HDC hdcDraw = ::CreateCompatibleDC( hdcWindow ); if( QHTM_GetHTMLHeight( hdcDraw, urlstring, NULL, QHTM_SOURCE_FILENAME, imaxWidth, &m_uMaxHeight ) ) { LPBYTE mImage; BITMAPINFO bitmapinfo; bitmapinfo.bmiHeader.biSize = sizeof(bitmapinfo.bmiHeader); bitmapinfo.bmiHeader.biWidth = imaxWidth; bitmapinfo.bmiHeader.biHeight = -m_uMaxHeight; bitmapinfo.bmiHeader.biPlanes = 1; bitmapinfo.bmiHeader.biBitCount = 32; bitmapinfo.bmiHeader.biCompression = BI_RGB; bitmapinfo.bmiHeader.biSizeImage = 0; bitmapinfo.bmiHeader.biXPelsPerMeter = 100; bitmapinfo.bmiHeader.biYPelsPerMeter = 100; bitmapinfo.bmiHeader.biClrUsed = 0; bitmapinfo.bmiHeader.biClrImportant = 0; HBITMAP hBitmap = CreateDIBSection(NULL, &bitmapinfo, DIB_RGB_COLORS, (PVOID*)&mImage, NULL, 0); if( hBitmap ) { // Select the bitmap and render the HTML onto it. hBitmap = (HBITMAP)::SelectObject( hdcDraw, (HGDIOBJ)hBitmap ); if( QHTM_RenderHTML( hdcDraw, urlstring, NULL, QHTM_SOURCE_FILENAME, imaxWidth ) ) { // Deselect the bitmap hBitmap = (HBITMAP)::SelectObject( hdcDraw, (HGDIOBJ)hBitmap ); if( !DDBToDIB( hBitmap ) ) { (void)::DeleteObject( hBitmap ); (void)::ReleaseDC( gHWnd, hdcWindow ); (void)::DeleteDC( hdcDraw ); memset( m_LastBuildURLAdress, 0, sizeof(TCHAR) * _XDEF_MAX_URLSTRINGLENGTH ); return FALSE; } } (void)::DeleteObject( hBitmap ); } else { (void)::ReleaseDC( gHWnd, hdcWindow ); (void)::DeleteDC( hdcDraw ); memset( m_LastBuildURLAdress, 0, sizeof(TCHAR) * _XDEF_MAX_URLSTRINGLENGTH ); return FALSE; } } else { (void)::ReleaseDC( gHWnd, hdcWindow ); (void)::DeleteDC( hdcDraw ); memset( m_LastBuildURLAdress, 0, sizeof(TCHAR) * _XDEF_MAX_URLSTRINGLENGTH ); return FALSE; } (void)::ReleaseDC( gHWnd, hdcWindow ); (void)::DeleteDC( hdcDraw ); return TRUE; }
BOOL WriteWindowToDIB( LPTSTR szFile, CWnd* wnd) { CDC *pDC = wnd->GetDC(); CBitmap bitmap; CDC memDC; CRect rect; int W = 640; int H = 480; memDC.CreateCompatibleDC(pDC); wnd->GetWindowRect(rect); // W = rect.Width() - 10; // H = rect.Height() - 10; bitmap.CreateCompatibleBitmap(pDC, W,H ); CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); int x = rect.Width() - W; x /= 2; int y = rect.Height() - H; y /= 2; memDC.BitBlt(0, 0, W,H, pDC, x, y, SRCCOPY); // Create logical palette if device support a palette CPalette pal; if( pDC->GetDeviceCaps(RASTERCAPS) & RC_PALETTE ) { UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * 256); LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize]; pLP->palVersion = 0x300; pLP->palNumEntries = GetSystemPaletteEntries( *pDC, 0, 255, pLP->palPalEntry ); // Create the palette pal.CreatePalette( pLP ); delete[] pLP; } memDC.SelectObject(pOldBitmap); // Convert the bitmap to a DIB HANDLE hDIB = DDBToDIB( bitmap, BI_RGB, &pal ); if( hDIB == NULL ) return FALSE; // Write it to file WriteDIB( szFile, hDIB ); // Free the memory allocated by DDBToDIB for the DIB GlobalFree( hDIB ); wnd->ReleaseDC(pDC); return TRUE; }