Fehler TPixmap.paste

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

BlitzMoritz

Betreff: Fehler TPixmap.paste

BeitragMi, Apr 23, 2008 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo! Folgendes Problem:
Die Methode 'paste' von TPixmap erzeugt mehr oder weniger große, hässliche Pixelfehler, v.a. in Schleifen. Im folgenden beispielhaften Code kann man dies beim öfteren Wiederholen durch Mausklick immer wieder beobachten, bitte selbst einmal testen:
Code: [AUSKLAPPEN]
Graphics 640,480,0
Local Bildquelle:String = "Bild_64x64.png"
Local EinzelPixmap:TPixmap
Local GesamtPixmap:TPixmap
Repeat
   EinzelPixmap = LoadPixmap(Bildquelle)
   GesamtPixmap = CreatePixmap(200,200, PF_RGBA8888)
   GesamtPixmap.Paste(EinzelPixmap, Rand(0,135),Rand(0,135))
   Repeat
      Cls
      DrawPixmap GesamtPixmap, MouseX()-100, MouseY()-100
      Flip
   Until MouseHit(1) Or KeyDown(KEY_ESCAPE)
Until KeyDown(KEY_ESCAPE)
End

Das Auftreten dieser Fehler ist nicht vorhersehbar sondern scheint zufällig. Weder Hardware, noch Betriebssystem spielen eine Rolle. Die Fehlerpixel scheinen mitunter Relikte aus den Pixmaps vorangegangener paste-Methoden zu sein, so dass die These nahe liegt, dass TPixmaps im Graphikspeicher o.a. irgendwie nicht richtig geleert wird, auch wenn sie nur lokal existieren. Unter Linux ist das am deutlichsten zu sehen: Teile des vorher gepasteten Bildes erscheinen additiv und irgendwo (z.T. gespiegelt). Weder ein jeweiliges Pixmap-gleich-Null-setzen, noch eine jeweils neu erzwungene Variable mit New TPixmap, noch GLMax2DDriver() haben Abhilfe verschafft.
Weiß jemand Rat?

BtbN

BeitragMi, Apr 23, 2008 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Pixmaps liegen nicht im Grafik-Speicher, deshalb sind sie auch so langsam.
Die sind nur im RAM.
Die paste-methode macht nichts anderes, als die Pixmap zeile für zeile durchzugehen, die Pixel vom fremden ins eigene format zu konvertieren und dann in den eigenen speicher zu schreiben.

BlitzMoritz

BeitragFr, Apr 25, 2008 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe die Lösung in einem Beitrag von rema gefunden:
Zitat:
Wenn man ein Pixmap erstellt, so wird der reservierte Speicher nicht gelöscht. Er können sich somit ungewollt Bildfehler ergeben.
Jetzt ist ein neue Method zu dem Modul Pixmap's hinzu gekommen: ClearPixels( pixmap,$rrggbbaa )
Im obigen Code muss also hinter CreatePixmap folgender Befehl eingefügt werden:
Code: [AUSKLAPPEN]
ClearPixels(GesamtPixmap)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group