Deutsch
Forum

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-Hilfe zu Create (hPic...)
Vor dem Beenden des Programmes 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 für einen bestimmten Zweck arbeitet mit der Grafik?

Danke.

If: kanndst du so etwas mal wieder als Nativen Code für XPSE entwickeln ?

Danke.

Gruss
 
13.04.2012  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

10.533 Betrachtungen

Unbenanntvor 0 min.
Jörg Sellmeyer15.05.2018
Uwe Lang17.01.2017
mein02.06.2013
Heiko Dix10.11.2012
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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