Bueno ya he probado tu codigo y lo corri con un depurador.
Esta es la linea mala.
Código:
blit (BackgroundImage, Buffer, 0, 0, 0, 0, 640, 480);
Lo unico que se me ocurre es que no se carga el bmp por alguna razon y como no hay nada que lo verifique pues entonces a la hora de querer copiar un bitmap erroneo(puntero en cero) pues te da ese error.
Pon una condicion como te lo han sugerido para ver si se carga correctamente el bitmap.
Saludos