保存的
BOOL CMyChangePictureDlg::Save(LPCTSTR lpszFileName, HDC saveDC, RECT rc)
{
BITMAPFILEHEADER bf = { 0 };
BITMAPINFOHEADER bi = { 0 };
HDC hMemDC;
HBITMAP hBitmap;
LPBYTE lpBits;
bi.biSize = sizeof( BITMAPINFOHEADER );
bi.biBitCount = 24; // 保存为true color
bi.biWidth = rc.right - rc.left;
bi.biHeight = rc.bottom - rc.top;
bi.biPlanes = 1;
bi.biCompression = BI_RGB;
bi.biSizeImage = bi.biWidth * bi.biHeight * 3;
HDC hdc = ::GetDC( NULL );
if( !hdc )
return FALSE;
hBitmap = CreateDIBSection( hdc, ( CONST BITMAPINFO * )&bi, DIB_RGB_COLORS,
( VOID ** )&lpBits, NULL, 0 );
if( !hBitmap ){
::ReleaseDC( NULL, hdc );
return FALSE;
}
hMemDC = CreateCompatibleDC( hdc );
HBITMAP hOldBmp = ( HBITMAP )SelectObject(hMemDC,hBitmap );
BitBlt( hMemDC, 0, 0, bi.biWidth, bi.biHeight, saveDC, rc.left, rc.top, SRCCOPY );
SelectObject( hMemDC, hOldBmp );
::ReleaseDC( NULL, hdc );
DeleteDC( hMemDC );
bf.bfType = 0x4d42;
bf.bfSize = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER )
+ bi.biSizeImage;
bf.bfOffBits = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER );
CFile file((LPCSTR)lpszFileName , CFile::modeCreate | CFile::modeWrite);
file.Write((void *)&bf,sizeof( BITMAPFILEHEADER ));
file.Write((void *)&bi, sizeof( BITMAPINFOHEADER ));
file.Write((void *)lpBits, bi.biSizeImage);
file.Close();
DeleteObject( hBitmap );
return TRUE;
}
BOOL CMyChangePictureDlg::Save(LPCTSTR lpszFileName, HDC saveDC, RECT rc)
{
BITMAPFILEHEADER bf = { 0 };
BITMAPINFOHEADER bi = { 0 };
HDC hMemDC;
HBITMAP hBitmap;
LPBYTE lpBits;
bi.biSize = sizeof( BITMAPINFOHEADER );
bi.biBitCount = 24; // 保存为true color
bi.biWidth = rc.right - rc.left;
bi.biHeight = rc.bottom - rc.top;
bi.biPlanes = 1;
bi.biCompression = BI_RGB;
bi.biSizeImage = bi.biWidth * bi.biHeight * 3;
HDC hdc = ::GetDC( NULL );
if( !hdc )
return FALSE;
hBitmap = CreateDIBSection( hdc, ( CONST BITMAPINFO * )&bi, DIB_RGB_COLORS,
( VOID ** )&lpBits, NULL, 0 );
if( !hBitmap ){
::ReleaseDC( NULL, hdc );
return FALSE;
}
hMemDC = CreateCompatibleDC( hdc );
HBITMAP hOldBmp = ( HBITMAP )SelectObject(hMemDC,hBitmap );
BitBlt( hMemDC, 0, 0, bi.biWidth, bi.biHeight, saveDC, rc.left, rc.top, SRCCOPY );
SelectObject( hMemDC, hOldBmp );
::ReleaseDC( NULL, hdc );
DeleteDC( hMemDC );
bf.bfType = 0x4d42;
bf.bfSize = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER )
+ bi.biSizeImage;
bf.bfOffBits = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER );
CFile file((LPCSTR)lpszFileName , CFile::modeCreate | CFile::modeWrite);
file.Write((void *)&bf,sizeof( BITMAPFILEHEADER ));
file.Write((void *)&bi, sizeof( BITMAPINFOHEADER ));
file.Write((void *)lpBits, bi.biSizeImage);
file.Close();
DeleteObject( hBitmap );
return TRUE;
}