Italia
Foro

Bildspeicherverbrauch in der While-Schleife....

 

funkheld
Dieses bild& in der While-Schleife;
bild&=create("hpiccopy",screen&,200,200,50,50)
wird ja immer wieder neu erzeugt.
Wird da immer wieder neuer Speicher verbraucht, oder wird das Bild immer in den gleichen Speicherbereich gelegt, so das das vorgehende nicht rausgenommen werden braucht?

Danke.

Gruss
 {$cleq}
 {$compiler d:\xprofan11\}
 {$runtime d:\xprofan11\}
declare screen&,bild&,ende&
ende&=1
Window 20,20-500,500
Cls RGB(220,220,220)
screen& = create("hNewPic", 400,400,rgb(255,255,0))
startpaint screen&
usebrush 1,rgb(0,128,255)
ellipse 200,200-250,250
endpaint

Whileloop 10000

    drawpic screen&,20,20;0
    bild&=create("hpiccopy",screen&,200,200,50,50)
    startpaint screen&
    drawpic bild&,100,10;0
    endpaint

EndWhile

End
 
13.04.2012  
 




Jörg
Sellmeyer
Profan-Aiuto zu Create (hPic...)
Vor dem Beenden des Programmi muß das Handle mit DeleteObject wieder freigegeben werden, da ansonsten der von der Bitmap belegte Speicherplatz nicht wieder an das System zurückgegeben wird.


In Deinem Fall wird die Schleife ja nur einmal durchlaufen, da kann nicht so viel passieren. Du kannst aber mit DeleteObject das Handle immer wieder löschen. Wenn Du tatsächlich viele Handles bneötigst, speicherst Du sie am Besten in einem Array.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
13.04.2012  
 




funkheld
Habe jetzt eine Whileloop mit 10000
Es kommt zum Crash.

Wie kann ich jetzt etwas vom Screen in die Variable bild& setzen ohne dauernd dieses DeleteObject bild& zu nutzen .

Gibt es kein Befehl dazu?

Danke.
Gruss
 
13.04.2012  
 



DeleteObject ist der übliche Weg.
 
13.04.2012  
 




Jörg
Sellmeyer
Was hast Du gegen DeleteObject?
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
13.04.2012  
 




funkheld
Jup, danke.
Ich habe unten ein Bereich eingerichtet mit : mcls 50,50
Darin habe ich ein Teil des Screen kopiert : copybmptomem 200,200-50,50>0,0

Wie bekomme ich das BIld jetzt an eine bestimmte stelle vom Screen&?
Wie komme ich an die Adresse des mcls-Speichers um die Daten zu manipulieren ?

Danke.

Gruss
 {$cleq}
 {$compiler d:\xprofan11\}
 {$runtime d:\xprofan11\}
declare screen&,bild&,ende&
ende&=1
Window 20,20-500,500
Cls RGB(220,220,220)
screen& = create("hNewPic", 400,400,rgb(255,255,0))
bild&=create("hnewpic",60,60,rgb(0,0,0))
mcls 50,50
startpaint screen&
usebrush 1,rgb(0,128,255)
ellipse 200,200-250,250
endpaint

While ende&

    drawpic screen&,20,20;0
    copybmptomem 200,200-50,50>0,0
    .........

EndWhile

waitkey
End
 
13.04.2012  
 




Jörg
Sellmeyer
Du kannst auch mit StartPaint -1 direkt auf die Memorybitmep zeichnen oder Du erzeugst mit @Create("hPic",N,S) und dem Parameter "&MEMBMP" eine Kopie
Profanhilfe zu Create (hPic,...)
... der aktuellen mit MCLS oder MLOADBMP erzeugten Speicherbitmap....
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
13.04.2012  
 



Gibt ja auch MCopyBmp X1,Y1 - X2,Y2 > X3,Y3; N1[, N2] was man nach StartPaint auf Screen anwenden kann.
 
13.04.2012  
 




Darin habe ich ein Teil des Screen kopiert


Und wenn der Screen (teils, z.B. von Fenstern) verdeckt wird?
 
13.04.2012  
 




funkheld
MCopyBmp geht nur bei MLoadBmp Bildern:


Der Bildschirmausschnitt der beginnend bei X1,Y1 eine Breite von X2 Pixel und eine Höhe von Y2 Pixel hat, wird aus dem mit MLoadBmp geladenem Bild an die Position X3,Y3 kopiert.


Trifft bei mir aber nicht zu, ich möchte eine Kopie ohne immer dieses "Create"...

Danke.

Gruss
 
13.04.2012  
 



@Funkheld:
Was genau hast Du denn vor?

Ich kann mir nämlich vorstellen das es eine einfachere/ schnellere Herangehensweise gibt.

Wenn Du sowas wie "Sprites" realisieren möchtest dann empfehle ich das Bild im
Speicher zusammenzusetzen und einmal pro Frame auf das Zielausgabefenster
zu kopieren.

Quasi vom Ablauf her:
 
13.04.2012  
 




funkheld

Was hast Du gegen DeleteObject?


Wenn ich etwas laufend speichern möchte zum Auswerten, warum muss man da immer eine neuen Speicherbereich schaffen und wieder freigeben.

Gibt es nichts das man nur mit dem einem Reservierten Speicherbereich per einen bestimmten Zweck arbeitet mit der Grafik?

Danke.

If: kanndst du so etwas mal wieder als Nativen Code per XPSE entwickeln ?

Danke.

Gruss
 
13.04.2012  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

10.640 Views

Untitledvor 0 min.
Jörg Sellmeyer15.05.2018
Uwe Lang17.01.2017
mein02.06.2013
Heiko Dix10.11.2012
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie