Supongo que estás usando la parte de directDraw de directX:
1.- Si tu bitmap de colisión está en una superficie directDraw:
El problema es que para hacer cualquier cosa con alguna superficie primero pasa de memoria de video a RAM el pedazo que quieres modificar o leer y recién puedes acceder al pixel. Es muy lento y es mejor tener todo el tiempo esa superficie en RAM.
No existe una función específica para tener el color de un pixel, tienes que hacer un lock/unlock de la superficie para obtener un puntero a la zona que quieres trabajar.
2.- Si tu bitmap de colisión está alojado en un objeto como el Tbitmap de Delphi:
Como no tienes que dibujar el bitmap de colisión una buena forma es tenerlo en un objeto gráfico separado y acceder a sus pixeles con algún método como el scanLine del Tbitmap de Delphi, que te permite trabajar con toda una línea a la vez por velocidad.
3.- Si tu bitmap de colisión es un pedazo de memoria que reservaste:
Esta es la mejor alternativa, recuerda que no es necesario que la resolución de tu bitmap de colisión sea igual a la de tus gráficos.
4.- De todas formas es mejor para ahorrar memoria y tiempo de cpu que las colisiones las hagas mediante conjuntos de zonas rectangulares y circulares, o elipses (así también puedes definir zonas más débiles o fuertes). Es más muchísimo más rápido y no tienes que sacar tus superficies de memoria de video. Mucho mejor si creas una herramienta para que puedas definir tu mismo en base a tus gráficos las zonas de colisión y definir puntos débiles y fuertes.