DrawImageTiled(#Image, x, y, TileWith, TileHeight)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

DrawImageTiled(#Image, x, y, TileWith, TileHeight)

Beitrag von Lambda »

Habe ich für ein aktuelles Projekt gesucht. Im englischen Forum hab ich nur sehr große Lösungen gefunden.

Nicht ImageID() verwenden!
Hinzu kommt noch Width und Height zur Skalierung...

Code: Alles auswählen

Procedure DrawImageTiled(id, x, y, w, h)
  Protected tx, ty, temp, gw, gh, image_w, image_h
  
  image_w = ImageWidth(id)
  image_h = ImageHeight(id)
  
  For tx=0 To w/image_w-1
    For ty=0 To h/image_h-1
      DrawImage(ImageID(id), x+tx*image_w, y+ty*image_h)
    Next
  Next
  
  ; Bottom
  gh = h-(h/image_h)*image_h
  temp = GrabImage(id, #PB_Any, 0, 0, image_w, gh)
  
  For tx=0 To w/image_w-1
    DrawImage(ImageID(temp), x+tx*image_w, y+(h/image_h)*image_h)
  Next
  FreeImage(temp)
  
  ; Right
  gw = w-(w/image_w)*image_w
  temp = GrabImage(id, #PB_Any, 0, 0, gw, image_h)
  
  For ty=0 To h/image_h-1
    DrawImage(ImageID(temp), x+(w/image_w)*image_w, y+ty*image_h)
  Next
  FreeImage(temp)
  
  ; Edge
  gw = w-(w/image_w)*image_w
  gh = h-(h/image_h)*image_h
  temp = GrabImage(id, #PB_Any, 0, 0, gw, gh)
  DrawImage(ImageID(temp), x+(w/image_w)*image_w, y+(h/image_h)*image_h)
  FreeImage(temp)
EndProcedure