Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

ImageCreate und ImageDestroy

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 26.10.2009, 12:54    Titel: ImageCreate und ImageDestroy Antworten mit Zitat

Es kam bisher öfters vor, dass ich ein ImageBuffer neu erstellen muss weil sich die Größe des Bildes geändert hat.

Dabei bin ich bisher folgendes maßen vorgegangen:

Code:

...
 imagedestroy Bildbuffer  'Den alten Bildbuffer brauch ich nicht mehr, also Speicher freigeben.
 BildBuffer = imagecreate(NeueBreite,NeueHoehe,RGB(255,255,255) 'Neuen Bildbuffer mit neuer größe anlegen
...


Schaut man sich die Addressen von alt und neu-buffer an, kann man öfters beobachten das die selbe Addresse auftaucht. Das muss noch nicht unbedingt falsch sein. Aber wenn ich nun Grafikbefehle wie z.B. Line, Circle oder PUT auf den neuen Bildpuffer anwende, kommt es öfters zum Absturz!!

Ein kleines Work-Around behebt dieses problem:
Code:

...
dim AlterBuffer as any ptr = BildBuffer
 BildBuffer = imagecreate(NeueBreite,NeueHoehe,RGB(255,255,255) 'Neuen Bildbuffer mit neuer größe anlegen
 imagedestroy AlterBuffer  'Den alten Bildbuffer brauch ich nicht mehr, also Speicher freigeben.
...


D.h. ich hab die reihenfolge der Befehle geändert. Nun kommt es nicht mehr vor, das der neue und alte Bildpuffer die selbe addresse besitzen. Und Abstürze beobachte ich auch nicht mehr.

Mit dem Work-Around komm ich gut klar, auch wenn man prinzipiell zu einem kurzen Zeitpunkt mehr Speicher braucht...

Kann sich einer das ursprüngliche Problem erklären? Ist das ein Bug im ImageDestroy/ImageCreate ?
(Vielleicht sollte man das Problem in die Referenz aufnehmen...)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
croco97



Anmeldungsdatum: 04.11.2005
Beiträge: 260

BeitragVerfasst am: 26.10.2009, 23:45    Titel: Antworten mit Zitat

Na ja, da gibt's m.E. 3 Möglichkeiten:
1. Die fbgfx hat nen Bug. Halte ich aber für unwahrscheinlich, da sie ja nicht weiss, dass hier mit der gleichen Variable gearbeitet wird.
2. breite_neu und/oder hoehe_neu sind kleiner als _alt. Dann macht's nichts aus und es ist nachvollziehbar, dass die Speicherverwaltung wieder den gleichen Bereich verwendet.
3. In deinem Testproggi ist ein Bug, der dich meinen lässt, du hättest neuen Speicherplatz reserviert - es passierte aber gar nicht.

Mehr kann ich ohne Code nicht dazu sagen.

VG!

Croco
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 27.10.2009, 11:23    Titel: Antworten mit Zitat

Leider bekomme ich das problem in einem einfachen beispiel-code nicht nachgestellt.. Bin aber eigentlich davon überzeugt, das dieses Problem nicht nur in meinem größeren Projekt vorliegt..

Insbesondere, wenn sich breite und/oder höhe des Bildbuffers verkleinern beobachte ich meistens den absturz des kompletten programms.. Eigentlich sollte ja grade das kein problem darstellen. Aber anscheinend ists wohl nich ganz so stabil...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 27.10.2009, 11:42    Titel: Antworten mit Zitat

Was mir grade dringend fehlt, ist eine idee zu einem guten tutorial zur Gui-Programmierung... Ich bin offen für jeden Vorschlag! Nur bitte kein mammut-projekt als tutorial..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz