/* * readCoreInfo - read BITMAPCOREINFO structure from a bitmap file */ static BITMAPCOREINFO *readCoreInfo( FILE *fp ) { BITMAPCOREINFO *bm_core; BITMAPCOREHEADER *header; long bitmap_size; header = MemAlloc( sizeof( BITMAPCOREHEADER ) ); if( header == NULL ) { return( NULL ); } fseek( fp, START_OF_HEADER, SEEK_SET ); fread( header, sizeof( BITMAPCOREHEADER ), 1, fp ); fseek( fp, START_OF_HEADER, SEEK_SET ); bitmap_size = CORE_INFO_SIZE( header->bcBitCount ); bm_core = MemReAlloc( header, bitmap_size ); if( bm_core == NULL ) { return( NULL ); } fread( bm_core, bitmap_size, 1, fp ); return( bm_core ); } /* readCoreInfo */
bool WRAPI WRAddBitmapFileHeader( BYTE **data, size_t *size ) { BITMAPFILEHEADER *bmfh; BITMAPINFO *bmi; BITMAPCOREINFO *bmci; int hsize; bool is_core; if( data == NULL || size == NULL ) { return( false ); } is_core = ( *(DWORD *)*data == sizeof( BITMAPCOREHEADER ) ); hsize = sizeof( BITMAPFILEHEADER ); *data = MemRealloc( *data, *size + hsize ); if( *data == NULL ) { return( false ); } memmove( *data + hsize, *data, *size ); memset( *data, 0, hsize ); *size += hsize; bmfh = (BITMAPFILEHEADER *)*data; bmfh->bfType = BITMAP_TYPE; bmfh->bfSize = *size; bmfh->bfOffBits = hsize; if( is_core ) { bmci = (BITMAPCOREINFO *)( *data + hsize ); bmfh->bfOffBits += CORE_INFO_SIZE( bmci->bmciHeader.bcBitCount ); } else { bmi = (BITMAPINFO *)( *data + hsize ); bmfh->bfOffBits += DIB_INFO_SIZE( bmi->bmiHeader.biBitCount ); } return( true ); }
static BITMAPCOREINFO *WRReadCoreInfo( BYTE **data ) { BITMAPCOREINFO *bm_core; BITMAPCOREHEADER *header; long bitmap_size; int pos; if( data == NULL || *data == NULL ) { return( NULL ); } pos = START_OF_HEADER; header = (BITMAPCOREHEADER *)( *data + pos ); bitmap_size = CORE_INFO_SIZE( header->bcBitCount ); bm_core = MemAlloc( bitmap_size ); if( bm_core == NULL ) { return( NULL ); } memcpy( bm_core, *data + pos, bitmap_size ); *data += pos + bitmap_size; return( bm_core ); }