TileImageRect
Übersicht

![]() |
KabelbinderSieger des WM-Contest 2006Betreff: TileImageRect |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier eine Funktion, die ich für den Mapeditor von Wing Avenger geschrieben habe. Sie zeichnet ein Quadrat auf dem Bildschirm, dass mit einem bestimmten Bild ausgefüllt ist.
Also soähnlich, wie DrawImageRect, nur dass man bei TileImageRect auch über die Grenzen des Bildes hinaus gehen kann. Code: [AUSKLAPPEN] AppTitle "TileImageRect"
Graphics 640,480,16,2 SeedRnd MilliSecs() Global bild Function uter(a1,a2,opera$) Select opera Case "kleiner" If a1<=a2 Then Return a1 Else Return a2 EndIf Case "größer" If a1>=a2 Then Return a1 Else Return a2 EndIf End Select End Function Function TileImageRect(img,cx,cy,br,ho) imbr = ImageWidth(img) imho = ImageHeight(img) For x = 0 To Floor(br/imbr)-1 For y = 0 To Floor(ho/imho)-1 DrawImage img,cx+x*imbr,cy+y*imho Next Next For x = 0 To Floor(br/imbr)-1 DrawImageRect img,cx+x*imbr,cy+Floor(ho/imho)*imho,0,0,imbr,ho Mod imho Next For y = 0 To Floor(ho/imho)-1 DrawImageRect img,cx+Floor(br/imbr)*imbr,cy+y*imho,0,0,br Mod imbr,imho Next DrawImageRect img,cx+Floor(br/imbr)*imbr,cy+Floor(ho/imho)*imho,0,0,br Mod imbr,ho Mod imho End Function bild = CreateImage(100,50) Function neubild() SetBuffer ImageBuffer(bild) For i = -50 To 100 Step 2 Color Rand(10)*25,Rand(10)*25,Rand(10)*25 Line i,0,i+50,50 Next SetBuffer BackBuffer() End Function SetBuffer BackBuffer() Repeat mx = MouseX() my = MouseY() If MouseHit(1) = 1 Then If fix = 0 Then fix = 1 fixpunktx = mx fixpunkty = my neubild() EndIf EndIf If MouseDown(1)=0 Then fix = 0 If fix = 1 Then TileImageRect(bild,uter(mx,fixpunktx,"kleiner"),uter(my,fixpunkty,"kleiner"),Abs(fixpunktx-mx),Abs(fixpunkty-my)) Flip Cls Until KeyHit(1) End (Die Function braucht die beiliegende Funktion uter() nicht als Unterfunktion. Die wird nur hier im Hauptprogramm verwendet) |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Womöglich habe ich da jetzt etwas entscheidenes übersehen - aber ist es nicht eigentlich sehr viel unkomplizierter, wenn man einfach ein TileImage in einen Viewport zeichnet?
Hat Deine Lösung einen grösseren Geschwindigkeitsvorteil? ![]() + Ava + |
||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Hm.. darauf bin ich garnicht gekommen. Wusste nicht, dass das auch geht ![]() Die Geschwindigkeit hab ich eben einfach mal getestet. Meine Funktion war bei 10000 ausgegebenen Rects 2 Millisekunden schneller ![]() (Viewport 1586 ms, TileImageRect 1548 ms). Wechselt sich aber auch von mal zu mal ab. |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group