One good option is .RAW - this is supported in a few programs for heightmaps, like Cryengine3 for example, it's a raw image format that supports 16-bit greyscale, which is perfect for heightmaps - with 16-bit grey, you go from 0-255 resolution, to 0-65535 resolution.
Really, it's just raw data, you need to know the image dimensions to load it back in. It is supported in PhotoShopCS4 and Corel Paint Shop Pro.
To convert a float to a 16-bit raw WORD, I do it the wrong, long, horrible way because it works and I never bothered to work out the right way...
a=int(h#/256)
b=(h#-(a*256.0))*256
Then write out byte B then byte A for each pixel. Writing out pure WORD values from DBPro didn't work, so I did it that way.
A while ago someone was on the forum talking about a nice trick they'd found. What they do is take the heightmap, say a 256x256 greyscale heightmap, and make that the red channel. Then 2 tileable heightmaps, maybe even just a tileable texture made grey - those become the blue and green channels. So you end up with the main heightmap in red, and 2 tiled heightmaps in green and blue. Then the cool bit, the red heightmap is scaled by 4 times, so that 256x256 becomes 1024x1024 - a fairly decent heightmap size in any engine. The green heightmap is scaled by 2 and repeated 4 times, and the blue heightmap isn't scaled and repeats 16 times (4x4). All 3 heightmaps then work together, to provide 1 big 1024x1024 heightmap with good variance, and you only really have to make a 256x256 heightmap to make it. You'd work out each points heightmap value for red green and blue, then do something like this: h#=r+(g*0.01)+(b*0.0001)
So that's one option if you prefer to edit smaller heightmaps, big 1024x1024 heightmaps can be a right pain to design. If you go with the above method, probably best to consider procedural vegetation and decent tolerances on models - like you won't necessarily have any perfectly flat areas, so adding things like foundations or stilts to buildings is an idea.

I am the one who knocks...
