Fehler TPixmap.paste
Übersicht

![]() |
BlitzMoritzBetreff: Fehler TPixmap.paste |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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.
Im obigen Code muss also hinter CreatePixmap folgender Befehl eingefügt werden:
Jetzt ist ein neue Method zu dem Modul Pixmap's hinzu gekommen: ClearPixels( pixmap,$rrggbbaa ) Code: [AUSKLAPPEN] ClearPixels(GesamtPixmap)
|
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group