The second option is certainly more efficient, but probably not efficient enough.
My idea was to have an image map for the background of a game, and then have an invisible duplicate map that was just black and white. a character can move around in the black areas, but not the white areas. So I would check to see if the character's sprite DestRect had hit any white pixels. If so, then the character wouldn't move.
Maybe there is a better way?
-Sterling