Deutsch
Forum

Bildspeicherverbrauch in der While-Schleife....

 
- Seite 1 -



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  
 



 
- Seite 1 -



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  
 



 
- Seite 2 -


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


Ich glaube das ich das schon gemacht und imho auch schon gepostet habe.

Wenn Du etwas ausführen kannst was genau Du vor hast, dann könnte ich mal
drüber grübeln wie das meiner Meinung nach am effizientesten zu bewerkstelligen
wäre.

Was ich auch schon "gezeigt" habe ist das man sowas in eigenen/ neuen Threads
ablaufen lassen kann was aber nur in manchen Situationen praktisch ist.
 
13.04.2012  
 




funkheld
bpic1& = create("hNewPic", 128,128,rgb(0,0,0))
Ein Bild vom Screen mit bitblt fertig in die bpix1& zum weiterverarbeiten mit drawpic usw.

So ähnlich anders herum :

Danke.

Gruss
 
13.04.2012  
 



BitBlt kopiert das Bild, das klappt doch auch anders herum. Musst praktisch nur Quelle und Ziel umkehren.
 
13.04.2012  
 



funkheld (13.04.12)
bpic1& = create("hNewPic", 128,128,rgb(0,0,0))
Ein Bild vom Screen ...


Und was genau ist bei Dir "Screen"? Ein Fenster oder ein hPic?
 
13.04.2012  
 




funkheld
Ich habe die Routine mal nProc drawhcopy genannt.
Jetzt funktioniert es.

dx und dy sind die Werte aus diesem Versatz der bpic&: 30,10
startpaint bpic1&
drawpic bpic&,30,10;0
........
......

 {$cleq}
 {$compiler d:\xprofan11\}
 {$runtime d:\xprofan11\}
declare bpic&,bpic1&,bpic2&,ende&
ende&=1
bpic& = create("hPic",-1,"data\\auto.bmp")
Window 20,20-600,400
Cls RGB(220,220,220)
bpic1& = create("hNewPic", 400,200,rgb(255,255,0))
bpic2& = create("hNewPic", 128,128,rgb(0,0,0))

While Ende&

    startpaint bpic1&
    drawpic bpic&,30,10;0
    drawhcopy(bpic2&,hdc,0,0,128,128,30,10,~SRCCOPY)
    endpaint
    drawpic bpic1&,10,10;0
    waitkey
    startpaint bpic1&
    drawpic bpic2&,190,50;0
    endpaint
    drawpic bpic1&,10,10;0

EndWhile

End

nProc drawhPic(long hPic,dc,x,y,xx,yy,dwROP)

    long hDCBits=createCompatibleDC(hDC)
    selectObject(hDCBits, hPic)
    bitBlt(dc,x,y,xx,yy,hDCBits,0,0,dwROP)
    deleteDC(hDCBits)

endproc

nProc drawhCopy(long hPic,dc,x,y,xx,yy,dx,dy,dwROP)

    long hDCBits=createCompatibleDC(hDC)
    selectObject(hDCBits, hPic)
    bitBlt(hDCBits,x,y,xx,yy,dc,dx,dy,dwROP)
    deleteDC(hDCBits)

endproc


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.473 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