Iso Tile Converter

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Firstdeathmaker

Betreff: Iso Tile Converter

BeitragDo, Mai 01, 2008 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil ich sehe das gerade mal wieder verstärkt nach Iso Sachen gefragt wird, bastel ich an einem Tutorial welches einem alle benötigten Werkzeuge und Algos liefern soll. Als kleiner Teil dieses Tutorials habe ich eben ein Iso-Tile-Converter geschrieben. Damit könnt ihr Rechteckige Bodentiles in Topdownview auf Isometrische Ansicht rendern.

Dieses kleine Programm konvertiert normale rechteckige Tiles in Isometrische Tiles. Es funktioniert mit ALLEN Größen (egal ob gerade oder ungerade oder ungleiche Seitenlänge).
Aber um sie nachher vernünftig kacheln zu können, sollte man besser gerade Seitenlängen benutzen, z.b. 16*18 oder 32*32)

Und noch eine Sache: Das Program unterstützt auch den .png Alphachannel!

Das ganze habe ich auch mal als .Exe für BB User kompiliert, damit diese das Programm auch nutzen können.

Download 108 kb


Code: [AUSKLAPPEN]
Rem
Programmed by
Christian Geißler
aka
Firstdeathmaker
1.5.2008
Free to copy & use
End Rem
SuperStrict
Framework BRL.Blitz
Import BRL.Max2D
Import BRL.Retro
Import BRL.PNGLoader

Repeat
Local filter:String = "Image Files:png,jpg,jpeg,bmp;All Files:*"
   Local path:String = RequestFile("Select a rectangular image",filter,False,CurrentDir()+"\")


   If FileType (path) = 1
      Local image:TImage = LoadImage(path,DYNAMICIMAGE)
      If image
         TIsoConverter.ConvertImage(image)
      Else
         Notify "Invalid file format"
      EndIf
   Else
      Notify "File does not exist"
   EndIf

Until Not Proceed ("Do you like to convert another picture?")
End






Type TIsoConverter
   Function ConvertImage:TImage(img:TImage)
      Local map:TPixmap = ConvertPixmap(LockImage(img),PF_BGRA8888)
      Local imgwidth:Int = ImageWidth(img)
      Local imgheight:Int = ImageHeight(img)
      
      Local newimg:TImage = CreateImage(imgwidth + imgheight, (imgheight + imgwidth)/2)
      Local newimgwidth:Int = ImageWidth(newimg)
      Local newimgheight:Int = ImageHeight(newimg)
      Local newmap:TPixmap = LockImage(newimg)
      
      For Local x0:Int = 0 Until newimgwidth
      For Local x1:Int = 0 Until newimgheight
         WritePixel(newmap,x0,x1,$00000000)
      Next
      Next
      
      For Local x0:Int = 0 Until imgwidth
      For Local x1:Int = 0 Until imgheight
         Local pixel:Int = ReadPixel(map,x0,x1)
         
         Local a:Byte = pixel Shr 24
         Local r:Byte = (pixel Shl 8) Shr 24
         Local g:Byte = (pixel Shl 16) Shr 24
         Local b:Byte = (pixel Shl 24) Shr 24
         
         DebugLog a +"."+ r +"."+ g +"."+ b + "   "+pixel
         
         pixel = a*$1000000 + r*$10000 + g*$100 + b

         Local x:Int = (imgheight - imgwidth)/2 + (newimgwidth/2 + x0 - x1)-1
         Local y:Int = (x0+1 + x1) / 2
         
         WritePixel(newmap,x,y,pixel)
      Next
      Next
      
      UnlockImage newimg
      
      Local filter:String = "Image Files:png"
      Local path:String = RequestFile("Save Image (PNG)",filter,True,CurrentDir()+"\")
      If Lower(ExtractExt(path)) <> "png" path:+".png"
      
      SavePixmapPNG(newmap,path)
      
      Return newimg
   End Function
End Type
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group