Bild löschen
Übersicht BlitzBasic Beginners-Corner
BlitzproggerBetreff: Bild löschen |
Mi, Feb 18, 2009 21:12 Antworten mit Zitat |
|
---|---|---|
Hallo, ich würde gerne wissen wie ich ein bild vollständig löschen kann. Also so dass ich eine Variabel, der ich zb. mit createimage einen Wert zugeordnet habe, löschen kann und ihr dann nochmals zb. mit createimage einen Wert zuordnen kann. Mit Freeimage funktioniert es nicht.
mfg |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. |
hecticSieger des IS Talentwettbewerb 2006 |
Mi, Feb 18, 2009 21:14 Antworten mit Zitat |
|
---|---|---|
Zu jeder Hilfe stehen ganz unten weitere verwandte Befehle. Schaue mal selbst auf CreateImage
edit1: Wieso geht es nicht mit FreeImage. Mit FreeImage das Bild löschen und dann auf die selbe Variable wieder neu zuweisen. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
pile |
Mi, Feb 18, 2009 21:21 Antworten mit Zitat |
|
---|---|---|
Was passiert eigentlich, wenn man das Bild mit FreeImage nicht wieder freigibt, bleibt es nach Programmende im Speicher? Und welcher Speicher ist gemeint, in B+ kann man sich den Speicher ja aussuchen, aber wo geht es in B3D z.B. hin? | ||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
Tritium |
Mi, Feb 18, 2009 21:24 Antworten mit Zitat |
|
---|---|---|
Zitat aus der Online-Hilfe:
FreeImage "Das manuelle Löschen eines Bildes muss nicht angewendet werden. BlitzBasic macht es automatisch, wenn das Programm beendet wird. Allerdings kann man so während des Spiels unnötigen Speicher freigeben." LoadImage "Achtung: Jedes geladene Bild kostet ein Stückchen Grafikspeicher." |
||
Blitzprogger |
Mi, Feb 18, 2009 21:24 Antworten mit Zitat |
|
---|---|---|
Ich habe das Bild in einem Type in der Variabel w\image gespeichert. Diese sollte in einer Function (redrawwindow) gelöscht und nocheinmal mit anderer Grösse erstellt werden. Nur geht das aus irgendeinem Grund nicht. Hier mal den Code für die Geduldigen: Code: [AUSKLAPPEN] Graphics 1600,900,16,1
SetBuffer BackBuffer() SeedRnd MilliSecs() ;AppTitle "Vindows LOL","Wollen sie Vindows LOL bereits verlassen?" Text 0,0,"Bilder werden erstellt..." ;____________________Bilder___________________ Flip Delay Rand (200,1000) Global darkcolor_r = 50 ;50 Global darkcolor_g = 50 ;50 Global darkcolor_b = 80 ;80 Global darkcolor = (darkcolor_r+darkcolor_g+darkcolor_b)/3 Global hellcolor_r = 200 ;200 Global hellcolor_g = 200 ;200 Global hellcolor_b = 230 ;230 Global hellcolor = (hellcolor_r+hellcolor_g+hellcolor_b)/3 Global colordifferenz = hellcolor - darkcolor Global txt_r = 0 ;0 Global txt_g = 0 ;0 Global txt_b = 0 ;0 Global aktuell_r = 255 ;255 Global aktuell_g = 0 ;0 Global aktuell_b = 0 ;0 Global cls_r = 50 ;50 Global cls_g = 150 ;150 Global cls_b = 150 ;150 ClsColor cls_r,cls_g,cls_b Global zeigermode = 0 .newstart Global collidemouse = CreateImage(1,1) SetBuffer ImageBuffer(collidemouse) : Color 255,255,255 : Rect 0,0,1,1 Dim zeiger(1) zeiger(0) = createimage (40,40) ;LoadImage ("gfx\zeiger1.bmp") ;zeiger(0) Global window_streifen_x = CreateImage (1,25) ;window_streifen_x SetBuffer ImageBuffer(window_streifen_x) For i = 0 To 10 color_r = darkcolor_r+(colordifferenz/10*i) color_g = darkcolor_g+(colordifferenz/10*i) color_b = darkcolor_b+(colordifferenz/10*i) Color color_r,color_g,color_b Rect 0,i,1,25-i*2,1 Next Color darkcolor_r,darkcolor_g,darkcolor_b Rect -1,0,3,25,0 Global window_streifen_y = CreateImage (25,1) ;window_streifen_y SetBuffer ImageBuffer(window_streifen_y) For i = 0 To 10 color_r = darkcolor_r+(colordifferenz/10*i) color_g = darkcolor_g+(colordifferenz/10*i) color_b = darkcolor_b+(colordifferenz/10*i) Color color_r,color_g,color_b Rect i,0,25-i*2,1,1 Next Color darkcolor_r,darkcolor_g,darkcolor_b Rect 0,-1,25,3,0 Global window_ecke = CreateImage (25,25) ;window_ecke SetBuffer ImageBuffer(window_ecke) For i = 0 To 5 color_r = darkcolor_r+(colordifferenz/10*(i*2)) color_g = darkcolor_g+(colordifferenz/10*(i*2)) color_b = darkcolor_b+(colordifferenz/10*(i*2)) Color color_r,color_g,color_b Rect i,i,25-i*2,25-i*2,1 Next Color darkcolor_r,darkcolor_g,darkcolor_b Rect 0,0,25,25,0 Global window_kreuz_1 = CreateImage (25,25) ;window_kreuz_1 SetBuffer ImageBuffer(window_kreuz_1) For i = 0 To 10 Color 100+i*15,100,100 Oval i,i,25-i*2,25-i*2,1 Next Color darkcolor_r,darkcolor_g,darkvolor_b Line 5,5,20,20 Line 20,5,5,20 Global window_kreuz_2 = CreateImage (25,25) ;window_kreuz_2 SetBuffer ImageBuffer(window_kreuz_2) For i = 0 To 10 Color 0+i*25,0,0 Oval i,i,25-i*2,25-i*2,1 Next Color darkcolor_r,darkcolor_g,darkvolor_b Line 5,5,20,20 Line 20,5,5,20 Global window_scale = CreateImage (25,25) ;window_scale SetBuffer ImageBuffer(window_scale) Color darkcolor_r,darkcolor_g,darkcolor_b Line 20,5,5,20 Line 20,10,10,20 Line 20,15,15,20 SetBuffer BackBuffer() Color 255,255,255 Text 0,15,"Variablen werden erstellt..." ;___________________Variabeln________________ Flip Delay Rand (200,1000) Global MENU = 0 Global STELLENID = 0 Global mouse_x = MouseX() Global mouse_y = MouseY() Global mouse_z = MouseZ() Global mouse_hit_1,mouse_hit_2 Global mouse_down_1,mouse_down_2 Global different_x,different_y timer = CreateTimer(60) Type button Field x,y Field drauf Field image,draufimage Field windowid Field funktion,zielwindow End Type Type window Field x,y Field long,width Field image Field id,constantid Field title$ Field drauf,aktuell,closebar,scalebar Field txtstelle,buttonstelle End Type Type merktxt Field window Field x Field txt$ Field pr End Type Type icon Field image Field x,y Field name$ Field windowid End Type Type taskicon Field image Field id Field name$ Field windowid End Type Type merker Field wert End Type createwindow (0,75,500,400,0,1,1,"Fenster 1",0) createwindow (500,100,600,300,1,1,1,"Fenster 2",0) createwindow (1100,50,200,600,2,0,0,"Fenster 3",0) createtext (1,30,"[1] Dies ist ein Text.") createtext (1,0,"[1] Ich schreibe jetzt eine ganze Menge. Ich möchte prüfen ob alles fu-nktioniert;") createtext (1,0,"[1] >Blabla<, sagte sie. Was will man da tun? Also habe ich auch >Blab-la< gesagt. Kein Sinn? Ja, da hast du warscheinlich recht...") createtext (0,0,"[0] XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX") createtext (2,0,"[2] Das ist ein Fenster im Programm >>>Vindows LOL<<<") createtext (2,0,"[2] Jadoluudiooo!!!") bigest = 0 For w.window = Each window If w\id > bigest Then bigest = w\id Next For w.window = Each window If w\id = bigest Then w\aktuell = 1 Next While Not KeyHit(1) ;___________________Mainloop__________________ Cls checkmouse() drawwindows() check_windowsid() DrawImage zeiger(zeigermode),mouse_x,mouse_y WaitTimer (timer) Flip Wend End ;____________________Funktionen_______________ Function createwindow(x,y,long,width,stelle,closebar,scalebar,title$,aktuell) w.window = New window w\x = x : w\y = y w\id = stelle w\constantid = stelle w\long = long : w\width = width w\aktuell = aktuell w\image = CreateImage (long,width) SetBuffer ImageBuffer(w\image) For i = 0 To 1 For ii = 25 To long - 25 DrawBlock window_streifen_x,ii,i*(width-25) Next For ii = 25 To width - 25 DrawBlock window_streifen_y,i*(long-25),ii Next Next DrawBlock window_ecke,0,0 DrawBlock window_ecke,long-25,0 DrawBlock window_ecke,0,width-25 DrawBlock window_ecke,long-25,width-25 Color hellcolor_r,hellcolor_g,hellcolor_b Rect 25,25,long-50,width-50,1 w\title$ = title$ w\closebar = closebar w\scalebar = scalebar If closebar = 1 Then DrawImage window_kreuz_1,long-25,0 SetBuffer BackBuffer() End Function Function drawwindows() .ende windows = 0 STELLENID = 0 For w.window = Each window windows = windows + 1 Next For mt.merktxt = Each merktxt mt\pr = 0 Next While STELLENID < windows For w.window = Each window If w\id = STELLENID Then window_now = w\id w\txtstelle = 0 DrawBlock w\image,w\x,w\y ;normalwindowimage Color txt_r,txt_g,txt_b For mt.merktxt = Each merktxt ;text If mt\window = w\constantid And mt\pr = 0 Then mt\pr = 1 wide = ImageWidth(w\image) - 60 - mt\x zeichenanzahl = wide / 8 txt$ = mt\txt$ While Len(txt$) > zeichenanzahl Text w\x+mt\x+30,w\txtstelle*15+w\y+30,Left(txt$,zeichenanzahl) txt$ = Right(txt$,Len(txt$)-zeichenanzahl) w\txtstelle = w\txtstelle + 1 Wend Text w\x+mt\x+30,w\txtstelle*15+w\y+30,txt$ w\txtstelle = w\txtstelle + 1 EndIf Next If w\closebar = 1 Then ;close If ImagesCollide (collidemouse,mouse_x,mouse_y,0,window_kreuz_1,w\x+w\long-25,w\y,0) Then DrawImage window_kreuz_2,w\x+w\long-25,w\y If mouse_hit_1 = 1 Then windowid = w\id Delete w.window For w.window = Each window If w\id > windowid Then w\id = w\id - 1 Next Goto ende EndIf EndIf EndIf If w\scalebar = 1 Then DrawImage window_scale,w\x+w\long-25,w\y+w\width-25 ;scale STELLENID = STELLENID + 1 Color txt_r,txt_g,txt_b Text w\x+30,w\y+5,w\title$ If w\aktuell = 1 Then ;aktuell Color aktuell_r,aktuell_g,aktuell_b Rect w\x,w\y,w\long,w\width,0 EndIf EndIf Next Wend End Function Function check_windowsid() If mouse_hit_1 Then For w.window = Each window w\aktuell = 0 If overlap(w\image,w\x,w\y) Then w\drauf = 1 Else w\drauf = 0 EndIf Next bigest = 0 no_window = 1 For w.window = Each window If w\drauf = 1 Then counter = counter + 1 : no_window = 0 If w\id > bigest Then bigest = w\id Next If no_window = 1 Then Goto ende If counter > 1 Then bigest_drauf = 0 For w.window = Each window If w\drauf = 1 Then If w\id > bigest_drauf Then bigest_drauf = w\id EndIf Next For w.window = Each window If w\id = bigest_drauf Then first_window = w\id w\id = bigest w\aktuell = 1 EndIf Next For w.window = Each window If w\id = bigest And w\aktuell = 0 Then w\id = first_window Next Goto ende EndIf For w.window = Each window If w\drauf = 1 Then windowid = w\id w\drauf = frontwindow(w\id) If w\drauf = 1 Then first_window = w\id w\id = bigest w\aktuell = 1 different_x = mouse_x - w\x different_y = mouse_y - w\y EndIf EndIf Next For w.window = Each window If w\id = bigest And w\aktuell = 0 Then w\id = first_window EndIf Next EndIf If mouse_down_1 Then For w.window = Each window If w\aktuell = 1 Then If RectsOverlap(mouse_x,mouse-y,1,1,w\x+w\long-25,w\y+w\width-25,25,25) Then redrawwindow(w\id,mouse_x-w\x+mouse_x-w\long,mouse_y-w\y+mouse_y-w\width) Else If overlap(w\image,w\x,w\y) Then redrawwindow(w\id,mouse_x-different_x,mouse_y-different_y) EndIf EndIf EndIf Next EndIf .ende End Function Function movewindow(id,x,y) For w.window = Each window If w\id = id Then w\x = w\x + x w\y = w\y + y EndIf Next End Function Function redrawwindow(id,x,y) For w.window = Each window If w\id = id Then w\long = long : w\width = width FreeImage (w\image) w\image = CreateImage (long,width) SetBuffer ImageBuffer(w\image) For i = 0 To 1 For ii = 25 To long - 25 DrawBlock window_streifen_x,ii,i*(width-25) Next For ii = 25 To width - 25 DrawBlock window_streifen_y,i*(long-25),ii Next Next DrawBlock window_ecke,0,0 DrawBlock window_ecke,long-25,0 DrawBlock window_ecke,0,width-25 DrawBlock window_ecke,long-25,width-25 Color hellcolor_r,hellcolor_g,hellcolor_b Rect 25,25,long-50,width-50,1 If closebar = 1 Then DrawImage window_kreuz_1,long-25,0 SetBuffer BackBuffer() EndIf Next End Function Function overlap(image,x,y) If ImagesCollide (collidemouse,mouse_x,mouse_y,0,image,x,y,0) Then Return 1 End Function Function checkmouse() mouse_x = MouseX() mouse_y = MouseY() mouse_z = MouseZ() mouse_hit_1 = MouseHit(1) mouse_hit_2 = MouseHit(2) mouse_down_1 = MouseDown(1) mouse_down_2 = MouseDown(2) End Function Function frontwindow(stelle) window_drauf = 1 For w.window = Each window If w\drauf = 1 And w\id > stelle Then window_drauf = 0 Next Return window_drauf End Function Function createtext(windowid,x,txt$) mt.merktxt = New merktxt mt\window = windowid mt\x = x mt\txt$ = txt$ End Function mfg |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. |
pile |
Mi, Feb 18, 2009 21:27 Antworten mit Zitat |
|
---|---|---|
Tritium hat Folgendes geschrieben: Zitat aus der Online-Hilfe:
FreeImage "Das manuelle Löschen eines Bildes muss nicht angewendet werden. BlitzBasic macht es automatisch, wenn das Programm beendet wird. Allerdings kann man so während des Spiels unnötigen Speicher freigeben." LoadImage "Achtung: Jedes geladene Bild kostet ein Stückchen Grafikspeicher." Aja, Danke! |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
HolzchopfMeisterpacker |
Mi, Feb 18, 2009 21:32 Antworten mit Zitat |
|
---|---|---|
Fällt dir da was auf?
Code: [AUSKLAPPEN] w\long = long : w\width = width
FreeImage (w\image) w\image = CreateImage (long,width) |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Blitzprogger |
Mi, Feb 18, 2009 21:57 Antworten mit Zitat |
|
---|---|---|
Ich weiss, dass width nicht für die Y-Achse ist, aber das habe ich erst bemerkt als es schon "zu" anstrengend war um es zu ändern, aber das sollte nicht das Problem sein, denn width ist weder 0 noch untendran. Ansonsten fällt mir nichts auf.
mfg |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. |
HolzchopfMeisterpacker |
Mi, Feb 18, 2009 22:00 Antworten mit Zitat |
|
---|---|---|
omg
Nein, was ich dir zeigen wollte, ist, dass du die Wertzuweisung von long und width falsch machst, die werden nämlich immer 0 sein. |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Blitzprogger |
Mi, Feb 18, 2009 22:03 Antworten mit Zitat |
|
---|---|---|
Wieso denn? Geht es nicht mit einer Variabel die den "gleichen" Wert hat wie die in einem Type? zb. Code: [AUSKLAPPEN] x\blabla = blabla
mfg |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. |
HolzchopfMeisterpacker |
Mi, Feb 18, 2009 22:10 Antworten mit Zitat |
|
---|---|---|
So weisst du x\blabla den Wert von blabla (der logischerweise 0 ist) zu. | ||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
The_Nici |
Mi, Feb 18, 2009 22:19 Antworten mit Zitat |
|
---|---|---|
Wenn du einfach einer Bild-variable einen neuen Wert zuweist, wird der alte nicht gelöscht, da das Bild immernoch im Speicher ist, jedoch du das Handle nicht mehr hast.
MfG |
||
Blitzprogger |
Mi, Feb 18, 2009 22:24 Antworten mit Zitat |
|
---|---|---|
Nun komme ich nicht mehr draus.
@Holzchopf: Den Variabeln "long" und "width" wird doch ein Wert zugewiesen. @The_Nici: Ist es denn überhaupt möglich eine Bildvariabel zu löschen? mfg |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. |
The_Nici |
Mi, Feb 18, 2009 22:25 Antworten mit Zitat |
|
---|---|---|
Blitzprogger, wie gesagt, FreeImage. Löscht das Bild aus dem Speicher. | ||
XeresModerator |
Mi, Feb 18, 2009 22:27 Antworten mit Zitat |
|
---|---|---|
"long" und "width" sind weder Global noch werden sie in der Funktion als Parameter übergeben, daher sind sie in der Funktion 0...
Edit: "x" und "y" die an die Funktion übergeben werden, werden nie benutzt... |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
- Zuletzt bearbeitet von Xeres am Mi, Feb 18, 2009 22:38, insgesamt einmal bearbeitet
HolzchopfMeisterpacker |
Mi, Feb 18, 2009 22:31 Antworten mit Zitat |
|
---|---|---|
Also, entweder bin ich blind oder es wird ihnen eben doch nie ein Wert zugewiesen.
Mach folgendes: 1. Füge vor dem CreateImage, dass den Fehler verursacht, ein "Stop" ein. 2. Führe den Code aus. 3. Schau, was der Debuger für Werte für long und width anzeigt. 4. Überlege. 5. Erinnere daran, dass die korrekte Schreibweise für eine Wertzuweisung "Variable = Wert" ist. mfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Blitzprogger |
Mi, Feb 18, 2009 23:08 Antworten mit Zitat |
|
---|---|---|
oh ja. Ihr habt Recht.
*Korrigier* Hab es jetzt in Code: [AUSKLAPPEN] w\long = x : w\width = y
geändert. Es kommt leider immernoch dieselbe Fehlermeldung.
FreeImage (w\image) w\image = CreateImage (x,y) |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. |
HolzchopfMeisterpacker |
Mi, Feb 18, 2009 23:19 Antworten mit Zitat |
|
---|---|---|
Nicht dein Tag heute, wa?
Code: [AUSKLAPPEN] x=w\long : y=w\width
Edit: Argh nein sorry, die werden ja als Parameter übergeben Edit2: wenn du dir jetzt die werte von x und y anschaust im Debugger, wirst du (evtl) sehen, dass diese uU noch 0 sein können, überprüfe mal die Formeln dort wo RedrawWindow aufrufst. |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
XeresModerator |
Do, Feb 19, 2009 0:28 Antworten mit Zitat |
|
---|---|---|
Den ganzen Stress mit Variablen kann man sich sparen, wenn man sich eine ordentliche IDE zulegt, z.B. IDEal, und sich angewöhnt, die Variablen zu deklarieren - die erscheinen dann unterschiedlich coloriert, je nach dem, ob sie nicht, local oder global deklariert wurden. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group