Передача графических данных
Как видно из функции CreateSurface(), передача графических данных BMP-файла на поверхность осуществляется функцией Copy_Bmp_Surface(). Функция Copy_Bmp_Surface() пользуется услугами четырех вспомогательных функций, каждая из которых специализируется на пикселях определенной глубины. Код Copy_Bmp_Surface() выглядит так:
BOOL DirectDrawWin::Copy_Bmp_Surface( LPDIRECTDRAWSURFACE surf, BITMAPINFOHEADER* bmphdr, BYTE* buf) { if (surf==0 || bmphdr==0 || buf==0) return FALSE;
int imagew=bmphdr->biWidth; int imageh=bmphdr->biHeight; int imagebitdepth=bmphdr->biBitCount; BOOL ret=FALSE; if (imagebitdepth==8) { if (displaydepth==8) ret=Copy_Bmp08_Surface08( surf, buf, imagew, imageh ); } else if (imagebitdepth==24) { if (displaydepth==16) ret=Copy_Bmp24_Surface16( surf, buf, imagew, imageh ); else if (displaydepth==24) ret=Copy_Bmp24_Surface24( surf, buf, imagew, imageh ); else if (displaydepth==32) ret=Copy_Bmp24_Surface32( surf, buf, imagew, imageh ); } return ret; } |
Вспомогательные функции предназначены для передачи графических данных в зависимости от глубины пикселей BMP-файла и текущего видеорежима. Все четыре функции получают одни и те же четыре аргумента: указатель на поверхность-приемник, буфер с графическими данными из BMP-файла, ширину и высоту изображения. Каждая функция копирует графические данные BMP-файла на поверхность-приемник.