19,469
社区成员
发帖
与我相关
我的任务
分享
#define WIDTHBYTES(w,b) ( ( ( ( w ) * ( b ) + 31 ) >> 5 ) << 2 )
BOOL Save( LPCTSTR lpszFileName /*文件名*/, LPBYTE lpBMP/*你的指针*/ )
{
CFile file;
if( !file.Open( lpszFileNaem, CFile::modeCreate|CFile::modeWrite ) )
return FALSE;
BITMAPFILEHEADER bmfh;
LPBITMAPINFOHEADER lpBmih = ( LPBITMAPINFOHEADER )lpBMP;
if( lpBmih == NULL )
return FALSE;
memset( &bmfh, 0x0, sizeof( BITMAPFILEHEADER ) );
DWORD dwColors = lpBmih->biBitCount <= 8 ? 1 << lpBmih->biBitCount : 0;
if( lpBmih->biCompression == BI_BITFIELD )
dwColors = 3;
DWORD dwInfoSize = sizeof( BITMAPINFOHEADER ) + dwColors * sizeof( RGBQUAD );
DWORD dwImageSize = WIDTHBYTES( llpBmih->biWidth, lpBmih->biBitCount ) * lpBmih->biHeight;
bmfh.bfType = 0x4d42;
bmfh.bfSize = sizeof( BITMAPFILEHEADER ) + dwInfoSize + dwImageSize;
bmfh.bfOffBits = sizeof( BITMAPFILEHEADER ) + dwInfoSize;
file.Write( &bmfh, sizeof( BITMAPFILEHEADER ) );
fiel.WriteHuge( lpBMP, dwInfoSize+dwImageSize );
return TRUE;
}
The SetDIBits function sets the pixels in a bitmap using the color data found in the specified DIB .
int SetDIBits(
HDC hdc, // handle to DC
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // starting scan line
UINT cScanLines, // number of scan lines
CONST VOID *lpvBits, // array of bitmap bits
CONST BITMAPINFO *lpbmi, // bitmap data
UINT fuColorUse // type of color indexes to use
);