Here's my last collision system, I hope you'll like it

So, how does it works ? I'll try to explain it, but since I don't speak English well, it may be a bit hard to understand me
First, I think it would be good that you test it ; you can draw a map (bitmap please, not jpeg

) or download this one : http://sensai.free.fr/attreid/map.bmp
Okay, my map is ugly and blue, but if you dislike blue, just open it with Paint and replace the blue with red (or pink if you're a Lady ^_~).
If you want to draw a map yourself, be sure that the area around the coordinates {350,350} doesn't contain anything, and that it's a 800x600 pixels image !
Okay, now, you may launch it and test it
If you're still reading, then I guess you're interrested by my collision system (or do you like my map so much ?).. So I'll do my best to explain how it works
Line 5, I load the image and put it in a memblock .. I don't remimber why I didn't load an image but loaded a bitmap .. There was maybe something in the water
Look ad the line fourty, I give informations to the coll type (position X, position Y and Radius), then there's a gosub and I take the informations from the coll type.. Interresting, isn't it ? So everything's in the gosub .. Let's see it
On the way, one can see a few functions :
mem_point() gives the color of a pixel that's stocked in a memblock
arrondit() gives the integer of a float, but add one when the first decimal number is superior or equal to five
colliz() looks around the sphere if there's a collision (gives back 1) or not (gives back 0)
Then, my dear gosub. I like gosubs. They're lovely, with their two points and ... hmm.. I should shut up ^__^
So, as you can see, at the beggining, I put several variables to 0 ; I need them empty for the collision system
As you can see, there's almost the same code twice. It's for each side (left & right) of the circle. I'll explain only the left-handed one - the first one.
I look only at the pixels which are around the circle ; not the ones which are in it (it would be far too slow)
First step, I look if the pixel is in the bitmap - if it isn't, there'll be a problem with the memblock
Second step, I look the color of the pixel => if it's superior to 0, the pixel isn't black => there's a collision on that point => I add the position to the coll.center[x,y], I increase the number of collision points (coll.nbr), and I tell there's a collision (coll.hit=1)
Okay, now, I've all the informations, what should I do ? I should use them or drink a beer. Because I'm a kind guy, I'll drink my beer later, for now, I explain you how I use the informations ^^
first step : I've to use the informations only if there's a collision
Second step : I find the center of gravity of all the collision points (I divide the sum of their positions by their number)
Third step : I ask my dear DBP the angle between the center of the sphere and the center of gravity of the collision points
Fourth step : I move the sphere along the angle until there's no collision again
And ... that's all ^^
I hope you understood what I said ^^ .. .. .. Sorry for making you sleep ^_^
I've never been good at explaining things, especially not in a foreign language
The sleeper must awaken !