Как видно из функции 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; } |