If it's 2D, then you could load in a long image, a load of hills for instance, then check the pixel height along the whole image, and store that in an array. If you grab the Y height at each X location then you can use that to work out character collision against the terrain. It might take a little bit more memory to do it this way, but you get full control over the graphics, and collision detection with ground heights is practically no strain on the processor. You could even check height differences and use it for collision too, for left and right movement. Maybe the character can only climb a certain amount of pixels (4 for instance), so if the next Y height difference to the side of the character is more than 4 then they stop.
Another benefit in this sort of collision detection is that you can change it afterwards too. For example, if you made a motocross game, you can affect the collision to suit wheels, by checking each X location for a wheel shape instead of a single point. You could even affect the Y speed of the character so they keep momentum based on their last position - would be pretty effective in a fast platform or motocross game, like sonic maybe.