1: Read data from BMP file
CString bmpfile;
bmpfile.Format(TEXT("c:\\tp_empty.bmp"));
BITMAPFILEHEADER bmpheader;
BITMAPINFOHEADER bmpinfo;
DWORD bytesread;
HANDLE file = CreateFile ( bmpfile , GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL );
if ( NULL == file )
return 0;
if ( ReadFile ( file, &bmpheader, sizeof ( BITMAPFILEHEADER ),
&bytesread, NULL ) == false )
{
CloseHandle ( file );
return 0;
}
if ( ReadFile ( file, &bmpinfo, sizeof ( BITMAPINFOHEADER ),
&bytesread, NULL ) == false )
{
CloseHandle ( file );
return 0;
}
if ( bmpheader.bfType != 'MB' )
{
CloseHandle ( file );
return 0;
}
if ( bmpinfo.biCompression != BI_RGB )
{
CloseHandle ( file );
return 0;
}
if ( bmpinfo.biBitCount != 8 )
{
CloseHandle ( file );
return 0;
}
int width = bmpinfo.biWidth;
int height = abs ( bmpinfo.biHeight );
int size = bmpheader.bfSize - bmpheader.bfOffBits;
BYTE* Buffer = new BYTE[size ];
SetFilePointer ( file, bmpheader.bfOffBits, NULL, FILE_BEGIN );
if ( ReadFile ( file, Buffer, size, &bytesread, NULL ) == false )
{
delete [] Buffer;
CloseHandle ( file );
return 0;
}
CloseHandle ( file );
BYTE* lpBits = new BYTE[size ];
for( int y = 0; y < height; y++ )
{
for(int x = 0; x < width; x++)
{
lpBits[y*width + x] = Buffer[(height-1-y)*width+x];
}
}
if(Buffer)
{
delete[] Buffer;
}
if(lpBits )
{
delete[] lpBits ;
}
浙公网安备 33010602011771号