Loading a heightmap

BlitzMax Forums/BlitzMax Beginners Area/Loading a heightmap

I was trying to load in a height map, to generate a terrain with it using MiniB3D, but I'm having problems with getting the actualy height from a pixel value.
This is what I have now:
Global world:TPixmap	

Function LoadTerrainFromHeightMap(hmap:String)
	
	'load the heightmap image
	world = LoadPixmap(hmap)
	If Not world Then RuntimeError("can't load heightmap")
	
	'load pixmap dimensions
	ZoneX = world.width
	ZoneZ = world.height
	
	'create the array that will hold the height of the terrain
	Global ZN:Float[zonex, zonez]
	
	'loop trough the whole map, storing the height
	For x:Int = 0 To ZoneX - 1
		For z:Int = 0 To ZoneZ - 1
			
			'read the pixel and store in array
			Local h:Float = ReadPixel(world, x, (ZoneZ - 1) - z)
			h# = Abs(h#)
			ZN#(x, z) = (h#)
			
		Next
	Next

	RuntimeError(ZN#(1,1))
	
End Function

LoadTerrainFromHeightMap("bitmap.bmp")


For testing purpose I used a black bitmap, and it returned the value 16777260, wich is quite weird since I figured a black bitmap should return 0, and a white bitmap should return 16777216 (R*G*B=256^3).

And once I get the right rgb value from my pixelmap, I would have no idea how to get a good value from it that could serve as my Y variable when generating the terrain.

(I allready made the function that generates the terrain, the only problem I'm having is reading the height.)

Could anyone help me out please?

Thanks in advantage.

*edit*
I used a runtimeerror to return the value btw. :P

When saving a heightmap to an image file, I tend to use a single colour component (eg blue), providing for only 256 discreet levels, but that’s usually enough for my purposes. I then use bitwise operators when reading in the pixel value. Here’s some sample code (ignore the encoded media stuff):


EDIT: Actually, I think there's a bug in my code... I'll get back to you...

EDIT2: There we go. That's better...


'Move the mouse over the heightmap for coordinate and height value.

SuperStrict

'**** RESTORE ENCODED MEDIA - IGNORE
unencode(True)			
'**** 

Graphics 800, 600
SetBlend SOLIDBLEND

Global Map:Byte[,]
Global PM:TPixmap
Global Width:Int
Global Height:Int

If Not importImageFile("test.png") 
	Notify "Could not load hightmap file."
	End
EndIf
	
Local y:Byte = 0.0	
	
SetColor 255, 255, 255	
	
While Not KeyHit(KEY_ESCAPE)

	Cls
	
	DrawPixmap pm, 0, 0
	
	Local mx:Int = MouseX() 
	Local my:Int = MouseY()
	
	If mx < Width And my < Height
	
		y = Map[mx, my]
		DrawText "(" + mx + ", " + my + ") : " + y, 10, 200
	
	EndIf
		
	Flip True

Wend

End
	
	
Function importImageFile:Int(url:String)

  	pm = LoadPixmap(url)

   	If Not pm Return False      
    	
	If (pm.format <> PF_RGBA8888) Then pm = ConvertPixmap(pm, PF_RGBA8888)

	Width = PixmapWidth(pm)
	Height = PixmapHeight(pm)

	Map = New Byte[Width, Height]
   
   	For Local x:Int = 0 To (Width - 1)
   		For Local z:Int = 0 To (Height - 1)
      		Local c:Int = ReadPixel(pm, x, z)
       		c :| c Shr 24
       		Map[x, z] = $000000 | c
   		Next
   	Next

	Return True

End Function





'*************** ENCODED MEDIA SECTION BELOW - IGNORE ************





Function unencode:TBank(tofile:Int = True)
	
	Local url:String
	Local size:Long
	Local lines:Long
	
	Print "Unencoding..."
	
	RestoreData media
	
	ReadData url
	ReadData size
	ReadData lines
	
	Local bank:TBank = CreateBank(size)
	Local str:String
	Local bpos:Long = 0
	
	For Local n:Long = 1 To lines	
		ReadData str
		For Local i:Int = 0 To (str.length - 1) Step 2
			Local ch:String = "$" + Chr(str[i]) + Chr(str[i + 1])	
			Local val:Byte = Byte(ch)
			PokeByte bank, bpos, val
			bpos :+ 1
		Next
	Next

	If tofile
		Local fho:TStream = OpenFile(url)

		If fho
			CloseFile fho
			If Not Confirm (url + " exists. Replace file?") Then Return bank
		EndIf
	
		If Not SaveBank(bank, url)
			Notify "Could not create output file."
			Return bank
		EndIf
	EndIf

	Print "Done."
	
	Return bank
		
EndFunction

#media
DefData "test.png", 7527, 60
DefData "89504E470D0A1A0A0000000D4948445200000080000000800806000000C33E61CB00001D2E4944415478DAA55DED92E2480CCB40C3FBBFEE0203F7E79C5384243B7B5395DA9D1906926EB73F64D9FEB9DFEFDBF57ADD6EB7DBB6D6DA6EB7DBE1BADFEFDBFD7EDFFF8FBF5B6BED7F53FF5F6B6DD7EB75BB5C2EF2FAF9F9D9EA"
DefData "EBF3F96CDBB66DEFF7FB70FDFEFEB6D7EBF58AD7F3F9DC9ECFE7FEDAF7FBBD7F5E7DFDFCFCEC17DE5FFD9F9FE37ABD7EAD513DEF5A6BBB5C2E8775C0F5C08BD7A47E86F783F7FAF97CBED6A8D6C93DF7F3F9DC1E8FC7F6E7CF9FEDCF9F3FDBE3F1D81E8FC7FEF37ACDE20776977A3027046AE1708159083E9FCFF6FBFBBB3F"
DefData "140AC1EBF5929B8F8B85EFC9EF5F9FFBFBFB7B103A27043F3F3FFBFDE27DD73AA803809B7C5600F87B75406A8D707DEAFF6A5DD5FAE25587E1FD7E6F4B9DD233829016A31380927425D9EFF77B7BBD5EDB5A6B17829272B5F975F1EFEBEFAED7EBD782D63DF0E96301C0E7570250EB3215002558781F6EF3DEEFF776BD5E0F"
DefData "9BAF841FDF43698EBAAED7EBB7003815A584A03B0DEA24A99B6409AFEB7ABDEE0FAAA45D5DFC9AD7EBB5FF3D6E3C0A005F4E00D04CAA4D569B5FA6018504BFAFFF2B6D86A7950F8AD218EA6FDD55EB7B30014E1BE022B887E513C17FE71EB4B4000A409DF8EBF5BA6F60FDCB769AEF155F57F7599AE3FD7E7FA956757ADC73"
DefData "2BB3C76BA134A5D3A4AC0D5833B2CA4653C987480980121CF6B3162F6AB708F8709DCA2BA708BFE7CD537E406DA4DB68F573DC7C5CE85DD2D73A6881BAD86E7602D03DBF7ABDDA78D60EEAF42B01286DE60440FD6D6DB672B0173B40FFC71FC087C27F9D49400D80B61F371A4F34AB77DEFCFA0C140434252500B8A0680AF0"
DefData "14A567EDD645D9F8EEBD5C045027B6EE5B692CE700F3697FBFDFFB41A8F55ACA7E26359B7C824EEA79819400B0AD2FF5AF4C07FA074AFD9729A9D7A0064021506A1405559935B50EEA77DD7A29C1C6537CB95CF68DEC1C3EFEDB5AD3DAF4FA3F1E96E59C2A75D23ACD909C401721A0C35227B5365CA937F6F871735968D079"
DefData "AC138036D169010C1F950077FE925BBB4E5BD47AB01A47955FF7C8A1ADC20DD007724EF95261901202270C4ACA95B7AB80228E0438BC51CE0DFF1CD57BDD93120C1400768C5800EAE429FF87373999A66E9D9410A8C8E8E7E7675F9BFA8C726859589CC641B58FF71B7D00A57294D3E8241C913144CDD804A000F0E6F31787"
DefData "6BA8FEF91E31DC610DE084803F47E1192EAC4DA169A70D5800CA863B3B3FC10B2621FE72A7FC8C59E81C451722D6FBB1B4E317AB37FC7CDC5C5E68D60CF5FF5A582700F8792EFA5078C344603BCDC00722397A0E4799F870F81ECB49760A0FDDE67F4957038CA0C4D746F0E6F3E9E4CF66DB5FCE21620ACA0954F1B112387E"
DefData "76B501E90B6DF6C4776084B4FBFA7C3E3BCAC9CEA203C70E02A0BC56251409214C4EA2824D9513A8A4BA54196E0A3E209A0C3E9D781A303AC0938E6192C2CCD9F9749BDB6D7E4A3A29B3AB7216B82EECABA0CFC290B2038BEAE72BA98994159B86882E24545180B2790CDAD46BD0C6F34945CD80C9A0D20CFC99B58878EAD8"
DefData "AB56EAD89929956F484E35FF4E6D16BE1EEF99D70CB5C8C4342D7592D58D258C400948828B51FDB30FA04E026E406DB8C204D4E66368598BC72196FA390B803B8D6AD3D5EB9533ED367AAA61A6AF51F75CF7B93A14CB251D92E65071BF0A03F90BB100F599B85868BBF974A003C8D101DAFB12380688EA77DDA62A07D5396A"
DefData "E914F2F7CAE9EDAECE5CB96758138043D91667DBBA78B784C1A9520E055D1480F69B37B74EB6CA27603888B83A23846C9E5426F1CCA9537FEB04041D47657EA642C0C936E5F8AE29A29554934AA52A268D03827071F8E70EB1C3D3CF78393B87CA5CA069C1EFD11CE03D39BC80EF5FAD91D32249906AE3D2A976DAC4BD9685"
DefData "C09A8029E2A5B2685D74C097D2001C055412C3A94605EE94AFC0A40F34376CE7D1A9E2848C3221098C713677A2DE9D7FD1A9730566B9BFDF354097B99AF2FB3A44F02C058A9DB812040C07CB57E0D08EB17356850E69AB13C72A5BC1AFF8CC930D509BEB9C3FFEFCE9E6B390B91C81A484A5FCB7DBC4A4051CFA84A0082E20"
DefData "A26F2800FCDAEBF57A780FF5C048229938646C2727CC21B6CDC9B14B0E23879A4A63A80416DB72C5F773CF7288029802E5F2D96C531DB43841A1DC62B9C5AEFBA887E253CA1EFB190AD9EBF5929BCF849104C838DB3B51E3C974A8CD6552289369F984A7CF38004153D5EF364765F81451814F8153572E765694691404CC88"
DefData "B9CD570BAD4E9C0BA71258933658815BEA33D5C955A459C59CE6D730D4FD15069E45F818C048AADEA933A5929C1A639A96CADD63EC5ED878F9014AA07831902F8839808404260F5EA96265DB9D9A76296B45F32ABE2353BDA6E6610405AB0C58177A28C74BF1DCDD4323E2C78E5E729A146B36316D9D7AE4F757F1B62297F2"
DefData "B33847CDD1BC940025662F6B01F57B15264B01E852960A22760E46A2292954CF9D1A0643386BA61C384412951D6602096A16C51C563E8A136A04B33A670E059D85480940227772A5903201BCF9DBB61D1941D3D3CFBF739EAADA78E545D7A628CF9B4D8D4B9C28B3A1EEA3424A4CA196D9A82FC410A6DA6162C313EB692A00"
DefData "ACEE53399DF319F0FDD724E7CF6ADFA51B9337ADA0D694FAC453A6EE8F43C80269D88E73AE1C9D5C4E372BC268F25D262640856EE89F7012CCB181DDE976763F09050AC1725EBBF3FC1D82E5D4BD52FDB8590EADE2EF190B50769D0B4E1DA68035032824B819EA04779941E58BF08670FE01379F0F056E94DA645738CBDAC2"
DefData "398A3B0E9092128977EEE2F99485522156173F230114054061E68805B87C390A029A00D4240AC071DEBCCB09A03FC2347806BDEAF39549ADABA21517E67555D44A88562222A4BC73478E50E18B0271BAFCB6CB36A6FB99F01B39B45454AA69664F913F149B970585850E9F4B9900476D4F1101DB7FDE93E5D4F994EAD4D97F"
DefData "C5BAE94E3A7BF8CA4FE904004FB23265EE3DD3F34F627FD6984C38A9B5E01098B562622FB33F91B481D3165F61E08440E83C7017C7335ECF5C76F785AAD1F919670554451367099E4ECD2753A6AA7A9546E868DE8AC9A43637F9048C09480170E4459726C6052C29663E5EE7F1B3B387EA13C3B3F4F71360C741B6FC3E2E39"
DefData "E4A06A06A75C550F86CD6C0A791D53683DB1FB292C3CF8001DC36492DD53F5682EC7ED88205C96D565E992CFE10A3EDC3D9DBD384C759A82BDFEFA4CCE68A6B574BE948283D595B0832F1F40E5B0D5E9EF4C003A3FE86D23A4AB1C2A451049B904974750A726A5693BB42C61FA9DA940ADA82215570995B480C2063A21705A"
DefData "60255C7F5AFA34A520A5D8BF7B5F85F23914B2235E2AE74D9D0E56B78EB9E4FC0355E0C12D5A128EA240290E0B510B3C9FCFAFD81F2302B54E2B951A4F6ADEBA5C022FB23AE94AD85CA52CDBE944806034D1F9102AD5EA54AFBA1FB4DD0E47A80B41A7D290EE502870894F7F09020B03877CB62E60423474B58093C21047F2"
DefData "646153EA3AD5BF759EF2C4494CADEA5C2A55653395064DAC201412A79DD83F52EA1FB5400A09D90FC2CF5F6EE3D5899EF4015461A52362708EBED03E9717603FC2355162ED90D2AAEA1427C045D52B72624B09035636B9A25297824ECDB412C8A3CCE157716817362927309DFE2E5A70655708DFBAA60D8E39C392CE851EC9"
DefData "09729A847F5FEFC9E5658AFFD0E54D14D52CA969365FEA1E53024BA1A93B0EA09A24248EFFC40C7475748A1D8BA7CFB16E3B9A35FF3E61E54E0854E128BF873265AA60D59D3C85FA3981526B987C1315C129A7B78460B11AEC6C7EE20C2A6A38A78F5DE5ADCB8FB37A9D00412A0FEE6853296D3B311F8EB3C802C082E1184D"
DefData "2E0997B2ADCAA166A28B3B24CB6D7ED7E0A953FF0A51740ECE34AC442148685D972A4DBE40C2DA9DE6E81A38A8ACA55B8B2E0B9BA219CE7F54D491846DB1E49DF1F09360A89031451BAE51823A312E4E77193246C552D8973877FCDE0C617338EB0440B18612FEE2C02CF7B7AA8CCE85F9CB55F64C37DF4505137067CA2C4E"
DefData "05131C16A1A3A6D0B2048DF2C6ABD729A793A38E84A938889B99C8EAC028C7581167BB94FDA14144EA11E8AA7F5D3730471FEBD2B9AA8B689779732111923E5D3B7545AD52F1350B80039C14C4DD9D58472EC113DC15A5F0EFD1E17311DD5718A88A3B52EE7C5244A2EC173B8418FA392149E08DB3F528008C8E399854A54E"
DefData "196D532197734E19DB707E8D2B1A5105AAC93F50EB84EBA93AB01CDAC42526F0B43F60270028049C6D4C7D72120AD7F1E01D1F0EB58153F7F87793CEA2A9E183CA7E763C48A505142D5E85C40908FBEA11D4113EA74D0F3BDA76EAB4E5B80398FC5142D171E39843E7FC81320B681E149EEE6C70AAED4F0EA1F2FCB92E33D5"
DefData "593A81418A19B2B0A5004C1B43BA4ADD890024E7C43D207AB04ADD3A3E5CC79455D933B7F988FAFD4D87B014FD28159FFA35A5927A9730E2BC896A39BB3A95AF34C4B4A348A23DA530D1F5CDE1877455328E14A9CC016F7C77F2A79434473E49C8281F2A1E63A3926BCAF64FDAE11E8A43BB0D76EA3B75FD70E8556A393321"
DefData "653A07D03975C9E173DA4055D54EBB77A576EE1D16E25AEAA7865D5DA53137B7900230DDD80969546DAEABAEED285F2951C3E1DA74F3BB49630A1B50CFE308A80ED14B3D0494FA470D90E62E39F2C8045DFD7C3E47202871E75D9168D7E94AA159DCA265D25727D97BE7C1ABB0CF71E61C5288AA95433B95B398E0FA7C8253"
DefData "33EA04B32B4AFAA4C52C7EE69A307DBAF46E57D4E12A6A15A8D3F1F5F084B2ADEF4E3ACED4ABAB2BABE6648E7A66F4B819C4EA90B929D986F9985C47C8AADE31AFD85F5893746ED7CDCAB17BA7CD125D5EDC519F5381249F6A0CF1D4C677E55668BB3B1670D7E0A9AB7A9A5E138E850AFB1818DA5BC5A64250C756F99BBE3A"
DefData "D3CA1B95E8716D50523D1C6EB612882E27A068590E96753D879DF3D7CD6A9AF85FCECF9AC0C7360CEC66FB316942957C755E33DBCCD44CC255B4A4E10FAAA69E4F7DA2514D29DF8E12E60638A43175C90428724E57809B10C60327B0EB5A9DBCF3D4F923913B5D6185AAF2ED36A06BA392A2885447901658DD7BA721DCA83A"
DefData "E56C27E72FC1E589558DE576B8574B6DFAA4E2577DB8EBAC9534432AAB520D2292DF30A9A651ACE4E9C977A0D694799C660C3947DC455E93EA686E53A3046FB9E24FC523E38B810697E74E004A6AF834F5435203A6A4BD526D5FB7F9EE1E5DAFA0490FC504244D5056DE78D5D9940FE072B97D5787EFE2732626747DF33B54"
DefData "103790277F772D5B52572E5787D0112826C48CE9E6A7482B398A5DBFC38E8413DBC5BB58D33565509BEFDAC1380FB4CB9661B5CDA466D0D5E64D327A5C9C9A8A3E12B78F43C7840876AD76D25AA5D6F593723D393022659FA6B5F4AE1D4CA7E2CE660E53179249276DB7B93C9225453529EDEBF2F94908CE36A5482D729C86"
DefData "FCEA103265F77612FB7F30F1449D3A53AB386516AB7BE1DC7B57579742DC2E99D555EB24BF2831835D314DCA192C178326ECBA73E2D0214C5D3EBA3E435D17CFAEA0B5ABBF67BF85EF31B180D4FD3A7F69A2D952A978A7653BBE616ADD63278726A76332194375D356C51E93D6286A23A6C31A3B048D615E575BD84DFC48A7"
DefData "4E15B476BE815B5B97664FA73CE122CBDD448A00926D72B6C79583390FDA1131DDA48FA9BA76431E388DDA85942EFFD1358D54BC7DB7F95D558F0ABB1328265BC4249BD639262AEC49A95C54B52E3E776DD153C3E3293983FBF139762E9F5635584A452C2E3AE0D9460CD02854706A0A9456EA88B2F8B335F134D30663D893"
DefData "3A6563AF1CCE48E1FB399A17E2F693A414630D5C28C99DBA983CC9268133842AE7AEC89E4E137471BBD30C8E019CEC7C6A2BB7BAB12253A7C2B547E79C354FFE48EA52B17B53E8D79545B3402A7C5F217D0EAB50B072F2C63B56B1038CD2FBB9CEA28E2DCD6BBB5486CDA96EF73337CA85670363FD9C8AA7390B98DAB2A486"
DefData "4EAE1B288F9647F28462D34C20E1C4199C30A853738E04FE74C5AC930922EFF7FBBFFE00930105EC3CB1FA67EF59D1C85D35AD2A04994CD898E005886F70AD811B39C361A24B3CA9621797EF4F83B854E267E27BA9C651AE624A09C94A5C7A54D713B5CFCD0E5900D46C60C51B4C8E5E9A86E5EA1A7853B9A183632271C935"
DefData "6F346EBE6AF6A472FD25005DD9BDD342A977C1648610FB58ABEB318B13B85C7911C6CE0CA49C11806EAC4BC21B14EDA973AADC589B09C094E06C461899F0A9367FAD650771A4E25817FEA5E9220727508506386D9B6D264FD1643BAFEAD35C05B2B29728E913342B81272C105C84C19FC54DAAD85955636826ADF478C355C3"
DefData "2D45FB76C00E46322E84EE7C825D00BA922AECF489BE00E7FFD5E62BB835B5664F689A3BF9EEB4774913DE3C251C2E1270B0B4ABA35476DF9900D50F88435116EC4E08C64EA092181EC2A8E2F7E428E1E2A33DE645E3B4F204F0508295F205CA4C25CDC13E040B7C9AA1C82ABF54BC1202350545813AAFD72BF607E848328A"
DefData "FEBE3A1BC2A79F1B1F4F72E4AA579EAA074CB584AAB041153CBA2A1E4744ED9043F7E5685CE8E4F1F7DD2C65E70C6357D1E7F3190935890CC3CD330E1AC00941FD8B1141D2006A8E0F7AB6EA751DF7DE75C59AD4184EDAC4BB962B132E3F1770DE6E37C9AE2A2D5082E10661B9FCBD320FCFE7F3AF39067B3AB86B83A68442"
DefData "4DF37089148692F1F4AB56F2EA442A36AF537F5D9DBE8B1A54052D3BB8AA97019EE2B5961480CBE572F8B96A129DF010D769440166D30AE643A3C8D412B54E3FFA010A00EA46A0BBAE162CE92EC3E678FC935CBB829DD56899692651397278C2F1A4A3C7CF0DB51C57920F5E12109C4198FA0EBB6B298C9847AAF104900241"
DefData "92F7ED182C78FA15F5CADDB0EAD49572EB8940A942500CFB5478AA7A24E1C6DE6EB7AF9F773E40A2D1D5F376B3195EAFD7610CDEA4B4FED02832B5517558B363F6BAD2673C85B8F913960D7F768A8B13E14369268E6A5CF8A7DAE2A0BABFDD6E0701509DD45800DC80A834B91C4D10BE3FE33693F4F1AE0154F74BE5FD2BFB"
DefData "CF808AC3E8190D4C2622B58273FC3855F8C8AABD7E8F42A4EE9741236CDCC01B5A1B7FBFDFA59AE7581FCD82AB807643B5A7B39CCE1277250E50EA04B180AFDE326BB5B1A82A1A511027FA120EE6541C7E3EBD389481F10744F558BB3102A8402C65E34B005008521F450EF938CCC3EEA375009DB3E89A784EB985FBC41057"
DefData "5D7BB95CF67F954D75689EA35839ECDDE5E7B94DBB7370D0A47031864AF7721228550BE1675488576ABF04E07EBF1F7ECEEA5E755255D4F6FA1966EED8E976492687274C328A8BB348F5262C04ACC65D68D29557A902C53324C814FE392048E5EE1DFFCEE10AE8DCA1ED570280AF55EA99435FF66D5CDF80AEEEDF35FB74CC"
DefData "E5DD07C0CDBF5EAF5F9B8F4280A6C285782AC1C3A7DE114A921038B48C37D88D596153D191325900787371F35903A8049022C0A43E7E8ACE8642F337DD5CBEA280D7EBB57B92155620FEAF70005707C08C16A55655DAB56BA98ADEAF33379CD7673C0317D0D53538268EAA9B600DC09BCFAA1FDBB673191993675CBB77A73D"
DefData "2725660E3B5975FAEBE4A3035802A0C006EE49CB768733550CEAD47B2B1A942BD9720E0EE704D099C2CDEFA69F2BFBA9E27F1400A5FE31244CEA5861234CBF5B6BEDFB9252E0A9D826F9690BF3FFB5F978E2119050592AD523502574124AC8430DD8C9732194E2E7F134EE94D65578852A8C51193EC602940640F5AD60725E"
DefData "136660D5174E19E7754E94FEAEE7C3B66DFFD1C2190CAA9B29E1500250AFC345499D30944388E1249F54C5A573EC210E0BBB42111591A4C6D8AA3FB252F9880A2A9BCCC866C78744E7AFEBE33449847D3981BCA9CC04520C152686E0C6A3AA9A8C52618631F7C45136D595A9A3799954D52A41E96624614450F7C7F7A94C00"
DefData "33901C20A47817CE2799D2CB13E16629C7092383949655E089F20B143F9F6F9E19344CA6E8583328806A9892D306FC7307E77228CC040F0514A9CC1F7228151A88FC4B75603ACAF899AF2F0DA09C2A253989D3CEAF7130AD8A5D3993C6C04AD729B323517298E8E06447DC64678DEF5D99041600463C117257A8EBB401C424"
DefData "052CC3C08EEB867967E7B4754D14F8359D1D4D43A9D4894A24D2AE6902133A14978F7BF7B273A852C32C380A892B73594290F0FCBF69A29184638F3252E3049595ABD77264A02453B537E3538DA81AABFA349A8617C3992354AF8AAFE84EB4133C1521749354546534730D3B7AF984ADD4D1DC6432C8B52E9B967DBB020856"
DefData "9B2A7C72A8993BF9DD0971C5925CD8A9AA7ED2E7BAB136EC9D3B4F9DA7A89FE9663219343D692061D3C19356A5698A48C78A65BBAA369FC328B7F1A9D1834A36A5C109ACFED5B0CCAE552BD71B4EBA7F4DFB014DFB327583B512FB6A6F109106447469C789002142A69226FCB374F259A5AA2EA76EC094CAF5B3864AB57BAE"
DefData "767FD2FA2D0162D392F1491B9DC9FC8543183869173F9914DA0D9856CC99E438B143E648A4A9C731AB5C6502D2A8DC340E47D5273813E578FA67BA9C75805A6A9A91A2A3954A9A26B302BB41138E34A98813DD887A57C573665895E221A87B75E95595DC4AB90A57B9D3B1B1BB8DFC9BF6B6920F9050A43343A2591D2ADC5C"
DefData "094467563A92E7B4659DEA6AEE7C006582921A4EC3B614D0D6D5EE4D1A71747D892742B06D343CBAEB54E10A1A9C365025504EA3A8393953074AF1135347EFA4E952A3E6E4A9AB4AA7339D5526FD195C9F24D71339F1340F1AA0EB6A39D10A0AF4700E66A2324D1B242541702ACF356352914EE78025265122A5741A40D5EF"
DefData "75B311A72D73645D80CB924DAE33E36626BF4F2DD0BB868D0EA760D64D422CBB0E9C6EF355D326BE0F9E6BECEAF7793A8A1A91E31A3E9DB90EA561D374623759F44CDBF349D1A53A4D2EF7C09DBB78D398957CA68AC6F5E7634A1C52B55C0655CD364AF30FBBC9674900528FA0BD4348B2135D2A359DE65458992A88BAAED8"
DefData "8A999CEC9E9A53D8F522605E81431DDDB046A5517003DC287BB5C13C1B91E720A5A1999DD9F86A13770658383362AE73DE3A544CD1B43B80C49911A48C735B7AEEBCA136D2F1195CDB1B95EE559B899BFA783CE2C473350C6B3213515D4B8D8071DF77D9BF2E9F9046C3A430865946A920D53550E0CD477CDE0DB9708D1858"
DefData "70946973143A9E595C9BAD8442CD387E3E9FDBE3F18802C0A3F27868169A84D54DDB706892E3D275F5690AC14A4C57CEE5ABA2CE692EBCEB36A2CAD526F508692006136DEA5F3EC9F8BDD200FCBA1202370C9327A35B0D903246935C7A17414CDAB9620F1C55CFEFBA9473EFC2C49E71CD2B14AAC8A4958E8A9EFA06290008"
DefData "050037AB3615B54232014988DCDC44761E57F27EB94181A25A4D8644AABC3CBE8637C3B5A857357BDCA9733ACD43813638384209806B5AA928718E4A8702E0269BB259C068C09DF0C9C542756816ED5AC4AA56B129D598543D328B5CD303776295F6E1FAF90996E14E303A80DD806C85C0A5C9A94A00D268DB128052DDD399"
DefData "C868161E8FC7E17B7EBFBD49540A6B3A1CFA2C02A5EC383B622E0C741D44263468952A76656BDD946ED7C2854BDC5C1E9E075DF3062AC7306107EAA4E3E6A31028DC61254789DB94743D84BA86D27C32B05CCB51A0B147D0B4BB97AB2AEA4C941BD3960E875A878413F02C6425006CB7533C9F048035807ABF959208ECA977"
DefData "133D780150DD278A92A28CBB36F29371691C9275ED6953B1E88480E1BAAA386DC166A04E7D6D18FF8E6163154E3A0DC0BE02BFEF3AA3FAB9651C968FA55667CC80C57F5900BA56312EC9E3A6672A019874FE7408A15B1B27042919A42200850ABA3C80F203D4E57C870310C4A799C9885C1A9ED8AC5CD2C4654EA8FAB979A4"
DefData "E2C3F33DBA53991A3A73B1E7599E9DF3675C174E356799BBAF25B0A6DB7CE514AAC882FD06D62AB14F202E689D725526AE50AFD212581052A75E9596771DBCD30431D770AACB4C3A78D73189DDB0CA947C71FC44D400ECA5AB2C601A0AE190401741C476F1AE256C6D3E7BD089E8884322D4E64F0726B2AD750E96CB2E32FF"
DefData "BF6B03CB1BC5E5672C04CA3E2701724E9CB3F5DCC0CB6515156E801B8EFFDFC34054E91CFE603550DA7057368E85946A01D9F173004AEA16E60A3F5C9AD94DF848DDC954E83B4DBF2AF38A9B871A20BDA71B0EE11CC68E68B20B007704570BC3365BD5E4BDDFEFBDD308B27C76C469ADAFD7777E848BA13B01E846B4AA2255"
DefData "378409BB7771157267FFDD663A753D218B72573165D715C9C4BDEFEA902FAEF93F4C9DFCF764F32C01A68A1D3EF0DFBF490CA14E003A9224ABECC41E4E1338952A56664051B312EDCB09800397A623629219529A686F1193EC2F3A74EAC236A5D85E96B982FC378E45E4C2C83302A0AE8EA73019C1E23645B5B04D1B95C01E"
DefData "8E2E1CE8E4788193A9AB28ECFF00A1C55D21EF6B76C40000000049454E44AE426082"



Let me know if you want me to explain anything in that code.

Incidentally, there’s some stuff in the code archives related to heightmaps: Heightmap Toolbox V0.3.6

More specific to your question, if you could post some code that demonstrates how you are converting your height map data into image data, it might help.

A common technique is as follows:

Saving

* Generate the height map array (of floats, doubles or integers, etc).
* Create a blank image having the same dimensions as the array.
* For each coordinate:
# Derive a byte value from the height value.
# Use the byte value for the Red, Green and Blue component of the corresponding image pixel. (Displays as a ‘grey’ colour).
* Save the image.

Loading

* Load the height map image.
* Create a height map array (of floats, doubles or integers, etc) having the same dimensions as the image.
* For each pixel in the image:
# Read the pixel as an integer
# Use a bitwise operator to read a single colour component (byte value).
# Convert the byte value into a height value and place it in the corresponding array coordinate.

Thank you very much for the great example. I had allready looked into your HeightMap Toolbox you posted in the Code Archives, but I didn't really understand the code I found there, fortunatelly I do now with your explanation.

In my code I didn't export my map data to image data yet, I made my heightmap (for testing purpose) in paint and saved it as a bitmap. I guess images created in paint won't serve as heightmaps, since they don't work with your code either.
Well I guess I'll just have to write my own terrain editor to export heightmaps (not that I mind).

Just one question, what excatly does this piece of code do:
c :| c Shr 24
Map[x, z] = $000000 | c


I had allready looked into your HeightMap Toolbox you posted in the Code Archives, but I didn't really understand the code I found there


Heh. The intention with that code was to create a ‘class’ that could just be plugged-in / imported into an existing project. I suspect I’ve failed. Possibly I need to provide a collection of simple, old-fashioned functions instead.

As for those two lines of code, that I ripped from my Heightmap Toolbox written over a year ago, on closer analysis I think I must have been drunk at the time!

Here's a simpler method:

   	For Local x:Int = 0 To (Width - 1)
   		For Local z:Int = 0 To (Height - 1)
      		      Local c:Int = ReadPixel(pm, x, z)
      		      Map[x, z] = c & 255
   		Next
   	Next 


Variable c is a 32 bit signed integer (or, more importantly, 4 bytes), used to store a pixel’s properties: Red, Green, Blue, Alpha. Each byte in the integer corresponds to one of those properties, meaning they each can range in value from 0 to 255.

In order to extract only a single pixel property we use Bitwise AND (&). To get the value of the last byte in the integer, we & c with decimal 255.

Example:

In the sample image, test.png, coordinate 90, 100 has a decimal pixel value of:
16645629.

Decimal:
16645629
AND 255
= 253 (the height value we’re after)

Binary:
00000000111111011111110111111101
00000000000000000000000111111111
-----------------------------------------------
00000000000000000000000111111101

If you need an explanation of bitwise operations this article might help.


EASIER STILL:

Since I’m only using the final byte to store the height value, I could exploit BlitzMax’s Int to Byte type casting behaviour. Change the import loop to:

   	For Local x:Int = 0 To (Width - 1)
   		For Local z:Int = 0 To (Height - 1)
      			Map[x, z] = ReadPixel(pm, x, z)
   		Next
   	Next


Since each Map element is of type Byte, any integer assigned there will have its first three bytes discarded during the cast.



I made my heightmap (for testing purpose) in paint and saved it as a bitmap




You can do that. You just need write import code that 'knows' how you're mapping colours to heights. My example uses the red colour component. 0 = low, 255 = high. So any colour you draw with should be chosen accordingly.

Wo thanks, this cleared up alot :)
And don't get me wrong, you're Heightmap Toolbox works fine, it's just that I didn't want to blind copy your functions so I tried to actually 'understand' what they did (wich I do now).

I'm almost done making a terrain editor now, thanks for all the help.