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:

bmp-Datei im Screen löschen

 
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
Colle



Anmeldungsdatum: 25.05.2007
Beiträge: 21

BeitragVerfasst am: 21.01.2008, 12:26    Titel: bmp-Datei im Screen löschen Antworten mit Zitat

Hallo da draußen!

Zur Zeit verwende ich zur Ausgabe von Grafiken im Screen bmp-Dateien, die ich mit der Befehlskombination:

Code:

Bild = ImageCreate (Höhe, Breite)
Bload "Bild.Bmp", Bild
Put (x, y), Bild, Pset

in mein Programm einbinde.
Die Frage, die sich mir schon lange stellt, ist die, ob eine Möglichkeit existiert, die im Screen angezeigte bmp-Datei wieder zu entfernen.
Der Puffer lässt sich ja mit imagedestroy löschen.
Wie kann ich aber eine einzelne bmp-Datei wieder aus dem Screen entfernen?

Vielen Dank schon mal im Voraus für eure Mühe! happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 21.01.2008, 12:30    Titel: Antworten mit Zitat

Code:
LINE (x, y)-(x+Höhe,y+Breite),0,BF

_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Colle



Anmeldungsdatum: 25.05.2007
Beiträge: 21

BeitragVerfasst am: 21.01.2008, 12:41    Titel: Antworten mit Zitat

Hallo Stormy,
danke für dein Interesse.

Dadurch, dass ich mit deinem Befehl ein schwarzes Rechteck über mein Bild lege, ist mir leider nicht geholfen. traurig
Zur Zeit versuche ich, im FreeBasic-Screen (mit meinen Anfängerkenntnissen) ein Pull-Down-Menü nachzuempfinden.

Dazu wird nach dem Anklicken eines Buttons eine bmp-Menügrafik geladen.
Nach der Wahl eines Menüinhalts soll die bmp-Grafik wieder verschwinden.
Momentan arbeite ich noch so, dass ich bmp-Dateien einfach mit anderen bmp-Dateien überlagere.
Praktisch eine Multilayer-Technik. happy
Eleganter und viel praktischer wäre es aber, wenn die bmp-Dateien verschwinden würden, ohne Überlagerung bzw. ohne den vorhandenen Hintergrund im Screen zu beeinträchtigen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 21.01.2008, 14:36    Titel: Antworten mit Zitat

Ok, ich glaub zu verstehen was du meinst...

Also das bild ist auf dem screen nicht wirklich gespeichert. Die bilddaten überschreiben nur an der stelle wo du das bild auf dem bildschirm hinpackst den speicher der angezeigten bildschirmseite.

mach dir per PCOPY oder per SCREENCOPY eine kopie deines bildschirminhaltes bevor du das bild per PUT das bild auf deinem screen ausgibst.
Wenn das bild wieder verschwinden soll schreibst du mit dem gleichen befehl die kopierte bildschirmseite einfach zurück.

Sag bescheid wenn du ein beispiel dazu brauchst. Die hilfedateien die so im umlauf sind zeigen einem schon ganz gut wie das funktioniert...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 21.01.2008, 15:24    Titel: Antworten mit Zitat

Bestimt sowas die das hier?
http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=430

Der Trick bei diesem Beispiel ist einfach das das Komplette im normazustand gespeichert wurde und immer wieder neu "geputet" wird..

Dazwischen wird das Menu einfach in den Screen reingefahren.
Dannach wird einfach auf eine Taste gewartet und der Hintergrund wird erneut "geputet". Das ist alles.
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 21.01.2008, 17:59    Titel: Antworten mit Zitat

@OneCypher:
ScreenCopy bzw. PCopy machen aber afaik eigtl. was anderes. zwinkern
Get/Put passt da schon eher.
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Colle



Anmeldungsdatum: 25.05.2007
Beiträge: 21

BeitragVerfasst am: 21.01.2008, 20:49    Titel: Antworten mit Zitat

Guten Abend euch allen und vielen Dank für eure Mühe!

Heute habe ich leider nicht mehr genug Zeit, um mir das verlinkte Beispiel von AndT anzusehen.
Ich habe es einmal als neues Dokument gestartet, bringe es aber nicht ans Laufen, da ich zu viele Fehlermeldungen erhalte.

@OneCypher
Klar, wenn du Beispiele verlinken oder deren Code hier einfügen könntest, wäre das klasse!
Zitat:
Wenn das bild wieder verschwinden soll schreibst du mit dem gleichen befehl die kopierte bildschirmseite einfach zurück.

Wie genau funktioniert das?

Ich hänge mal ein denkbar einfaches Beispiel an:

Code:
cls

dim x as double

screen 14,32

locate 4,5:Input "Variable x:",x

SCREENCOPY

LINE (0,0)-(200,200),rgb (100,200,24),bf

getkey

screencopy

sleep


Nachdem man den Input getätigt hat, wird der Screeninhalt von dem grünen Feld überlagert.
Auf die nächste Aktion - hier getkey - sollte doch der zuvor mit screencopy kopierte Screeninhalt wieder erscheinen und so das Farbfeld verschwinden lassen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 21.01.2008, 21:34    Titel: Antworten mit Zitat

ScreenCopy hat wie gesagt eine komplett andere Bedeutung. Siehe http://www.fb-referenz.de/SCREENCOPY
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 21.01.2008, 23:28    Titel: Antworten mit Zitat

Hi,
ein Beispiel mit 2 Images:
Code:
Screen 17,32
Color -1,RGB(0,0,55)     'weiße Schrift, blauer Hintergrund
Cls                      'Bilschirm löschen mit Hintergrundfarbe
Dim As Any Ptr Bild, Hintergrund
Dim As Integer x=150, y=50, breit=150, hoch=30

Bild = ImageCreate (breit, hoch, RGB(100,100,100)) 'grauer Hintergrund
'BLOAD "Bild.Bmp", Bild
Draw String Bild ,(8,8),"Dies ist ein Bild",RGB(255,0,0)'Text in das Image schreiben

Draw String (x,y),"Dies ist ein Text" 'Text auf Bildschirm
Hintergrund = ImageCreate (breit, hoch)

Do
  Sleep 1000
  x=Rnd()*400
  y=Rnd()*300
  Get (x,y)-(x+breit-1,y+hoch-1),Hintergrund 'Bildschirmausschnitt als Image sichern
  Put (x, y), Bild, PSet 'zeichne Bild
  Sleep 1000
  Put (x, y), Hintergrund, PSet 'Bildschirmausschnitt zurück
Loop Until InKey=Chr(27)

ImageDestroy Bild
ImageDestroy Hintergrund
Ein Beispiel mit 2 Bildschirmseiten:
Code:
Screen 17, 32, 2         '2 Bildschirmseiten
Color -1,RGB(0,0,55)     'weiße Schrift, blauer Hintergrund
Cls                      'Bilschirm löschen mit Hintergrundfarbe
Dim As Any Ptr Bild
Dim As Integer x=150, y=50, breit=150, hoch=30

Bild = ImageCreate (breit, hoch, RGB(100,100,100)) 'grauer Hintergrund
'BLOAD "Bild.Bmp", Bild
Draw String Bild ,(8,8),"Dies ist ein Bild",RGB(255,0,0) 'Text in das Image schreiben

'ScreenSet 0,0 'ist die Grundeinstellung
Draw String (x,y),"Dies ist ein Text" 'Text auf Bildschirm

Do
  Sleep 1000
  ScreenCopy 0,1 'kopiere 1.Seite zu 2.Seite
  ScreenSet 1,1  'setze auf 2.Seite
  Put (Rnd()*400, Rnd()*300), Bild, PSet 'zeichne Bild
  Sleep 1000
  ScreenSet 1,0  'zeige 1.Seite
  Cls            'lösche 2.Seite
Loop Until InKey=Chr(27)

ImageDestroy Bild

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 22.01.2008, 11:18    Titel: Antworten mit Zitat

Fehler?
Bei mir gabs keinen (v0.18.2)

Lösungsvorschlag:
Bevor ein Menü operiert(geöffnet wird etc.) wird der gesamte Screen in ein FB.Image gesichert (z.B als Hintergrund).
Dann wird das Menu auf einer nicht angezeiten Seite als FB.Image erstellt um unschöne nebeneffekte zu vermeiden (heisst dan einfach Menu).
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Colle



Anmeldungsdatum: 25.05.2007
Beiträge: 21

BeitragVerfasst am: 23.01.2008, 10:05    Titel: Antworten mit Zitat

Guten Morgen!

@volta
Vielen Dank für deine Beispiele!
Damit erhalte ich vom Verständnis her einen Ansatz, wie ich mein Ziel erreichen kann. Sobald ich wieder mehr Zeit habe, versuche ich das neu Gelernte umzusetzen.

@AndT
Danke auch dir für deinen Beitrag!
Ich habe schon gedacht, dass es an der von mir verwendeten alten Compilerversion liegen könnte.
Darum werde ich mich demnächst mal kümmern müssen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 23.01.2008, 14:40    Titel: Antworten mit Zitat

Also per screencopy ists natürlich ein gutes stück einfacher als den umweg über get->put ... zumal man ja erstmal einen buffer mit imagecreate erstellen muss.. Man kann sich auch die ganzen positionsangaben sparen..

Dein beispiel würde dann so aussehen:

Code:

DIM x AS DOUBLE

SCREEN 14,32, 2      'als dritter parameter nimmt screen die anzahl der seite entgegen. Wenn ich das richtig in erinnerung hab, werden hierbei 3 seiten reserviert (0,1,2).. wobei hier in dem beispiel die 3. seite nicht benutzt wird.

LOCATE 4,5:INPUT "Variable x:",x

SCREENCOPY 0,1 'Kopiert seite 0 nach 1 (Seite 0 ist die sichtbare seite)

LINE (0,0)-(200,200),RGB (100,200,24),bf

GETKEY

SCREENCOPY 1,0 'Seite 1 wird nach 0 kopiert und damit wieder sichtbar

SLEEP


gegen screencopy sprechen nur wenig argumente.. ich glaub ist reine geschmackssache...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 23.01.2008, 18:16    Titel: Antworten mit Zitat

OneCypher hat Folgendes geschrieben:
Also per screencopy ists natürlich ein gutes stück einfacher als den umweg über get->put ... zumal man ja erstmal einen buffer mit imagecreate erstellen muss.. Man kann sich auch die ganzen positionsangaben sparen..

ist aber nichtsdestotrotz viiiiiel rechenlastiger und IMHO auch unsauber.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 23.01.2008, 19:10    Titel: Antworten mit Zitat

Rechenlastig könnt ich verstehen... aber warum unsauber?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 23.01.2008, 19:48    Titel: Antworten mit Zitat

gerade bei einem menü, bei dem ja auch "außen rum" was passieren kann, sollte man imho nur den teil wiederherstellen, wo auch das menü wirklich war.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 24.01.2008, 14:53    Titel: Antworten mit Zitat

Okay, darüber kann man wahrscheinlich endlos diskutieren...
(z.B. wenn ich ein menü aufklappe dann soll alles wieder so ausschauen wie vorher wenn ich es wieder zuklappe)
... naja, jeder hat haltn anderen geschmack happy
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