Was ganz komisches zu Hex$()

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

rema

Betreff: Was ganz komisches zu Hex$()

BeitragMo, Mai 30, 2005 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Will ein Pixmap auslesen, und aus Bequemlichkeit gleich mal den INT-Wert des Pixel als ein HEX-STRING speichern. Dabei kam ich zu folgendem Problem: nach jeder Schleife wurde diese immer langsamer!

Code: [AUSKLAPPEN]
Graphics 800,600,0

Pmap = LoadPixmap("/home/remo/Desktop/map2d_gameengine/map.png")

If Pmap = Null Then RuntimeError("fehler: bild")

' DrawPixmap Pmap, 10, 10



For i=0 To 10

   Cls

   t=MilliSecs()

   For x=0 To PixmapWidth(Pmap)-1
      For y=0 To PixmapHeight(Pmap)-1
         If KeyHit(1) Then End
         p:String = Hex$(ReadPixel(Pmap,x,y))   ' HIER IST DAS PROBLEM
         ' p:Int = ReadPixel(Pmap,x,y)   ' SO GEHTS OHNE ZEITVERZöGERUNG
         'If Mid$(p,3,2) = "FF" Then Plot x+200,y+10
      Next
   Next

   Flip


   Print " i > "+ (MilliSecs()-t)

Next


WaitKey()

End


Das Image hat die Grösse von 100x100 Pixeln. Am Anfang waren es 45ms, dann ca. 160, 300, 600, 800, und schlussendlich bis über 2000ms !!!

Was ist los?

rema

BeitragMo, Mai 30, 2005 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
OK, habe es jetzt mit FlushMem() probiert. Innerhalb der x,y oder i -Schleife hält sich das ganze in Grenzen, als unter 50ms.

Aber wiso tritt dies auf? Wird jedesmal neuer Speicher für den String reserviert?

Jolinah

BeitragMo, Mai 30, 2005 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup, der String ist ja lokal wenn er nicht vorher irgendwo definiert wurde.
Und die Hex-Funktion ist wahrscheinlich auch nicht die schnellste Wink

Am schnellsten wärs wahrscheinlich mit Shift-Operationen.
Code: [AUSKLAPPEN]

Local p:Int
Local rot:Byte
Local gruen:Byte
Local blau:Byte
Local alpha:Byte

... 'For schleifen
...
p:Int = ReadPixel(pmap, x, y)
rot:Byte = Byte(p)
gruen:Byte = Byte(p Shr 8)
blau:Byte = Byte(p Shr 16)
alpha:Byte = Byte(p Shr 24)

If gruen = $FF then plot x+200, y+10
...
... 'Ende For-Schleifen
  • Zuletzt bearbeitet von Jolinah am Mo, Mai 30, 2005 22:44, insgesamt einmal bearbeitet

rema

BeitragMo, Mai 30, 2005 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok Smile Man ist sich es halt aus dem BB noch gewohnt. Werde es gleich mal umsetzten. Danke!

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group