Seite 1 von 2

PictureBox leeren

Verfasst: Do 28. Feb 2019, 16:26
von roemi
Hallo,
und wieder etwas zu dem ICH keine Lösung finde.
Ich nutze sehr viel eine PictureBox. Fast mit jeder Aktion werden Bilder mit gambas code
PictureBox1.Picture = Picture[verz_download & v_image_out]
geladen.
Ich schaue mir ein Bild an und wenn es i.O. ist, kopiere ich es im Hintergrund, nenne es um etc.
Anschließend leere ich die Box mit gambas code
PictureBox1.Picture.Clear
Soweit, so gut.
Angenommen ich lade ein Bild Namens "logo.jpg" und dann zehn andere und dann wieder ein völlig anderes, aber ebenfalls mit Namen "logo.jpg" ... dann bekomme ich das erste "logo.jpg" angezeigt. Obwohl das nicht mehr vorhanden ist (umbenannt, weg kopiert und Original gelöscht)
Verwirrend ... ich hoffe nicht. Als hält die Box das Bild in einem Cache.

Re: PictureBox leeren

Verfasst: Fr 1. Mär 2019, 14:44
von gambasso
moin,

momentan weise ich dem Picture der PictureBox ein Image zu. Vorher jedesmal:
gambas code
Image1 = New Image()
Image1.Fill(-1)
> Image laden, dann zur PictureBox.
gambas code
PictureBox.Picture = Image1.Picture.Copy()
evtl. noch eine 'Resize' der PB
das klappt soweit bei mir.

Re: PictureBox leeren

Verfasst: Sa 2. Mär 2019, 15:38
von roemi
Ok. Probiere ich aus.

Thx.

Re: PictureBox leeren

Verfasst: So 3. Mär 2019, 18:48
von Honsek
Hallo roemi,

ob das hilft: https://www.gambas-buch.de/doku.php?id= ... t_loeschen ?

Mit freundlichem Gruß

Hans

Re: PictureBox leeren

Verfasst: So 3. Mär 2019, 19:40
von roemi
Hallo Honsek,

keine Ahnung wie oft ich schon auf dieser Seite war 🤔 aber bis runter habe ich offensichtlich nie geblättert. 😂

Re: PictureBox leeren

Verfasst: Mi 6. Mär 2019, 19:03
von roemi
Hallo Ihr zwei,

ich habe nun beide Varianten mehrfach im Code platziert und mehrfach getestet ... ohne Erfolg.
Die PictureBox wird nicht geleert.
😟

Re: PictureBox leeren

Verfasst: Do 7. Mär 2019, 11:53
von gambasso
moin,

Versuch mal...
gambas code
Dim himg As Image

himg = New Image(PictureBoxyx.W, PictureBoxyx.H)
himg.Fill(-1)

PictureBoxyx.Picture = himg.Picture.Copy()
Damit überschreibst Du das bestehende Picture mit ein leeres Image.
Vielleicht klappt es.

Re: PictureBox leeren

Verfasst: Do 7. Mär 2019, 19:14
von Honsek
ich habe nun beide Varianten mehrfach im Code platziert und mehrfach getestet ... ohne Erfolg.
Die PictureBox wird nicht geleert. ...
Hallo roemi,

ich habe mehrere Tests absolviert. Mit dem von mir angegebenen Quelltext wird in der PictureBox kein Bild angezeigt. Beschreibe doch mal, was ich mir unter '... ohne Erfolg' vorstellen muss! Bevor wir hier aneinander vorbei schreiben, teste doch (noch) mal das Projekt von der Seite https://www.gambas-buch.de/doku.php?id= ... t#download und ändere in der Zeile 37 den Wert für Wait auf 3. Reicht Dir die leere PictureBox nicht?

Ich suche noch einmal in den EMails von 2015 (!) nach den Antworten von Minisini zu den Methoden Picture.Clear() und PictureBox.Flush() und zur Antwort auf meine Frage, wie man eine PictureBox 'leert'. Ich melde mich dann wieder!

Mit freundlichem Gruß

Re: PictureBox leeren

Verfasst: Fr 8. Mär 2019, 00:14
von tionov
Hallo, falls das nicht bekannt ist ... hier kann die englische Mailingliste durchsucht werden:
https://lists.gambas-basic.org/cgi-bin/ ... ebox+clear

Re: PictureBox leeren

Verfasst: Fr 8. Mär 2019, 10:38
von roemi
Hi,
ich versuche es nochmal zu beschreiben.
Ich kopiere ein Bild z.B. logo.png in ein Verzeichnis.
Dann rufe ich in meinem Programm ein Funktion auf, die dieses Bild in der Größe anpasst und in die PictureBox läd.
Ist das Bild i.O. wird das Bild im Verzeichnis umbenannt und per FTP kopiert und gelöscht.
Die PictureBox wird geleert. Und das auf jede vorgeschlagene Weise.
Irgendwann kommt wieder ein Bild namens logo.png ins Verzeichnis.
Rufe ich dann meine Funktion auf, wird nicht das im Verzeihnis befindliche Bild sondern das zuerst aufgerufene logo.png dargestellt.
Obwohl dies gar nicht mehr existiert. Es muss sich also noch im internen Speicher der PictureBox befinden. Und das obwohl ich zwischenzeitlich duzende andere Bilder auf diese Art bearbeitet habe.

Re: PictureBox leeren

Verfasst: Fr 8. Mär 2019, 13:47
von gambasso
moin,

habe es jetzt so gemacht:
gambas code
   Dim himg As Image
   
   himg = New Image
   himg.Fill(-1)

    PictureBox3.Picture = himg.Picture.Copy()
   Wait
Danach sehe ich nichts mehr in der PictureBox3.
Vielleicht bindest Du mal ein Image mit ein und versuchst es mal damit, so wie im Beispiel.
Der Unterschied zum vorherigen Beitrag von mir ist das > himg = New Image ' (PictureBox3.W, PictureBox3.H) < ist weggelassen.
Ich hatte damit irgendwelchem Mist als Bild. Ich versuche mal weiter.

Re: PictureBox leeren

Verfasst: Fr 8. Mär 2019, 14:16
von roemi
Du kannst das nachvollziehen?

Ich lade ja zwischen zwei gleichnamige Dateien viele andere in die Box und ich lade, wenn kein Bild vorhanden einen Standard.

Re: PictureBox leeren

Verfasst: Fr 8. Mär 2019, 14:17
von gambasso
Weiter,

dann lade doch mal anstelle eines Picture ein Image. Vor dem Laden Löscht Du das Image (Beispiel). Nach dem Laden schickst du das Image wie im Beispiel zur PictureBox. Damit müßte das Problem behoben sein.

Eine kleine Hilfe:
gambas code
Public ArbImage As Image

Public Sub M1_Load_Img()
   
   Dialog.Path = FMain.ArbPfad '     < Dein Arbeitspfad
   Dialog.ShowHidden = True
   
   If Dialog.OpenFile() Then
      'FMain.LabelST1_1.Text = "Abbruch durch Benutzer!" ' war nur eine Anzeige für mich
      Return
   Endif
   FMain.ArbImage = New Image
   FMain.ArbPfad = Dialog.Path
   Try ArbImage = Image.Load(FMain.ArbPfad)
   
   If Error Then
      Message.Info("File '" & FMain.ArbPfad & "' nicht Laden!\n" & Error.Text & " Code: " & Error.Code, "OK")
      Return
   Endif
   
End

Public Sub Zeige_Bild()
   
	'  evtl. vorher anpassen
	PictureBox1.Picture = FMain.ArbImage.Picture.Copy()

End
Das müßte damit klappen. Die Bezeichnungen mußt Du natürlich anpassen.

Re: PictureBox leeren

Verfasst: Fr 8. Mär 2019, 14:48
von roemi
öhhh ... Try PictureBox1.Picture.Flush

Scheint zu klappen. hab gerade bestimmt 10 unterschiedliche log.png ohne Probleme angezeigt bekommen.
gambasso hat geschrieben:
Do 7. Mär 2019, 11:53
Ich suche noch einmal in den EMails von 2015 (!) nach den Antworten von Minisini zu den Methoden Picture.Clear() und PictureBox.Flush() und zur Antwort auf meine Frage, wie man eine PictureBox 'leert'. Ich melde mich dann wieder!
Das erinnerte mich auch an was ... und wer lesen kann, ist klar im Vorteil: Flushes the internal picture cache.

:oops: :oops: :oops: :oops:

DANKE (ganz groß geschrieben)

Re: PictureBox leeren

Verfasst: Fr 8. Mär 2019, 15:00
von Honsek
roemi hat geschrieben:
Fr 8. Mär 2019, 10:38
Rufe ich dann meine Funktion auf, wird nicht das im Verzeinis befindliche Bild sondern das zuerst aufgerufene logo.png dargestellt.
Obwohl dies gar nicht mehr existiert. Es muss sich also noch im internen Speicher der PictureBox befinden.
Hallo roemi,

mit relevantem Quelltext käme man besser voran. Gib doch mal den Quelltext zu 'meine Funktion' an, die Du aufrufst. Dann erkenne ich besser, was diese Funktion leistet. Die Aussage zum internen Speicher ist korrekt.

Ich war in der Zwischenzeit dabei, ein Projekt zu erproben, das noch einmal alle Theorie-Elemente zu Picture und PictureBox einsetzt und Deinen Ansatz berücksichtigt. Das Projekt liegt im Anhang

Mit freundlichem Gruß

PictureBox-0.2.2.tar.gz
(860.36 KiB) 28-mal heruntergeladen