[Gelöst] Return Image Problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Midimaster

Betreff: [Gelöst] Return Image Problem

BeitragSa, Feb 25, 2012 1:23
Antworten mit Zitat
Benutzer-Profile anzeigen
kann mir bitte einer sagen, was wir hier falsch machen?

Wir erzeugen in einer Funktion ein temp. Image und geben es dann via RETURN in eine TypeField zurück. Bei 9 Erstellungen arbeitet das Programm, bei 99 bleibt der Bildschirm hier im Testprogramm schwarz. Im eigentlichen Programm ist der Fehler wieder anders: Da wird mit der Fehlermeldung "Image dies not exist!" beendet. Seltsam!
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,0,2
Type Speicherplaetze
Field X%, Y%, Image%
End Type

For i=0 To 99
Sp.Speicherplaetze = New Speicherplaetze
Sp\X = Rand(800)
Sp\Y = Rand(600)
sp\image=FuegeSpielerBilderZusammen()
Next

For Sp.Speicherplaetze = Each Speicherplaetze
DrawImage sp\image,sp\x,sp\y
Next
DebugLog " fertig"
Flip
WaitKey()
End

Function FuegeSpielerBilderZusammen%()
Local AllesZusammen=CreateImage(100,100)
SetBuffer ImageBuffer(AllesZusammen)
For i=0 To 100
Color Rand(255),Rand(255),Rand(255)
Rect Rand(255),Rand(255),Rand(255),Rand(255)
Next
SetBuffer FrontBuffer()
Return AllesZusammen
End Function


[EDIT]
Habe noch versucht mit COPYIMAGE auszuschließen, dass der GarbageCollector die Ursache sein könnte. Beide Varianten aber brachten nix:
BlitzBasic: [AUSKLAPPEN]
Return CopyImage(AllesZusammen)

BlitzBasic: [AUSKLAPPEN]
sp\image=CopyImage(FuegeSpielerBilderZusammen())




Es muss am RETURNen des Bildes liegen, denn so geht es:
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,0,2
Type Speicherplaetze
Field X%, Y%, Image
End Type
ErstelleSpeicher
For Sp.Speicherplaetze = Each Speicherplaetze
DrawImage sp\image,sp\x,sp\y
Next
DebugLog " fertig"
Flip
WaitKey()
End

Function ErstelleSpeicher()
For i=0 To 999
Sp.Speicherplaetze = New Speicherplaetze
Sp\X = Rand(800)
Sp\Y = Rand(600)
sp\image=CreateImage(100,100)
Print sp\image
SetBuffer ImageBuffer(sp\image)
For j=0 To 100
Color Rand(255),Rand(255),Rand(255)
Rect Rand(255),Rand(255),Rand(255),Rand(255)
Next
Next
SetBuffer FrontBuffer()
End Function
  • Zuletzt bearbeitet von Midimaster am Sa, Feb 25, 2012 2:28, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragSa, Feb 25, 2012 1:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn nicht genug Speicher zur Verfügung steht, kann das Bild nicht erstellt werden. Ändert es was, wenn du Delay(5) oder so nach FuegeSpielerBilderZusammen() einfügst? Vll. braucht Blitz etwas mehr Zeit, so viel Speicher an zu fordern.
Zum genaueren einkreisen:
BlitzBasic: [AUSKLAPPEN]
Local AllesZusammen=CreateImage(100,100)
If AllesZusammen=0 Then RuntimeError("CreateImage failed!")


Return sollte nicht das Problem sein.
Der Code läuft bei mir jedenfalls anstandslos.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Midimaster

BeitragSa, Feb 25, 2012 2:27
Antworten mit Zitat
Benutzer-Profile anzeigen
danke Xeres,

leider war dein Tipp nicht die Lösung, aber manchmal hilft es schon, wenn einem jemand erzählt, dass es bei ihm läuft... Dann forscht man nochmals... Deine 5msec haben dann doch irgendwie die Lösung gebracht. Mit dem eingebauten DELAY ging es nur noch mit max 3 Bildern! 3x5=15msec... Und plötzliche sehe ich ihn, den Fehler.

Das switchen auf FrontBuffer() in Kombination mit dem FLIP lässt irgendwann den Bildschirm dunkel. Flip wäre gar nicht nötig in BB...

Das hat man von seiner dauernden Wechselei zwischen BMax und B3D. Man verwechselt was und sieht es einfach nicht. So war es jetzt auch hier.

Im Hauptprogramm war es ein Dreher, ich sah ihn einfach nicht:

BlitzBasic: [AUSKLAPPEN]
DrawImage sp\x, sp\y, sp\image


Sieht so schön aus... Jetzt geht es wieder.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group