| |
|
|
- 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
|
|
|
| |
|
|
|
| |
|
- 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
|
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
|
Darin habe ich ein Teil des Screen kopiert
Und wenn der Screen (teils, z.B. von Fenstern) verdeckt wird? |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
| @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:
|
|
|
| |
|
|
|
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 |
|
|
| |
|
|
| |
|
- 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. |
|
|
| |
|
|
|
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 :
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)
}
Danke.
Gruss |
|
|
| |
|
|
|
| BitBlt kopiert das Bild, das klappt doch auch anders herum. Musst praktisch nur Quelle und Ziel umkehren. |
|
|
| |
|
|
|
| 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? |
|
|
| |
|
|
|
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
{$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 |
|
|
| |
|
|