Page 1 sur 2

Comment copier le buffer vidéo dans un sprite?

Publié : mer. 14/déc./2005 12:44
par CameleonTH
Alor voila je voudrais savoir comment copier le buffer vidéo dans un sprite (ou une image) car je chercher un commande comme BackBuffer() comme dans Blitz3D mais j'ai pas trouver alor si quelqu'un a la réponse sa m'arangerais.
THX d'avance

Publié : mer. 14/déc./2005 13:48
par Dr. Dri
PB travaille déjà en double buffering... Je vois pas l'intérêt

Dri

Publié : mer. 14/déc./2005 13:53
par CameleonTH
C'est pour faire un chti effet de motion blur en temp réel come en Blitz3d.
Ou alor dis moi commen faire pour réaficher le buffer précedant.

Publié : mer. 14/déc./2005 13:57
par lionel_om
Bah avant chaque flipBuffer(), tu sauvegarde le sprite. et tu le réaffiche deux boucles après, et tu rajoute par dessus ce que tu veux ...

Publié : mer. 14/déc./2005 14:02
par Backup
en prenant une "photo"
rien ne t'empeche de copier le sprite dans une image buffer :D



; Code par DRAC !

Procedure CopySpriteToImage(Sprite, ImageID )
Hdc= StartDrawing ( SpriteOutput (Sprite))
bmp.BITMAP\bmWidth= SpriteWidth (Sprite)
bmp\bmHeight= SpriteHeight (Sprite)
bmp\bmPlanes=1
bmp\bmBitsPixel= GetDeviceCaps_ (Hdc, #BITSPIXEL )
bmp\bmBits= DrawingBuffer ()
bmp\bmWidthBytes= DrawingBufferPitch ()
hBmp= CreateBitmapIndirect_ (bmp)
StopDrawing ()
UseImage ( ImageID )
StartDrawing ( ImageOutput ())
DrawImage (hBmp,0,0)
StopDrawing ()
DeleteObject_ (hBmp)
EndProcedure

Publié : mer. 14/déc./2005 14:03
par lionel_om
Oula
Juste avec un :

Code : Tout sélectionner

grabiteSprite(#Pb_Any, 0, 0, ScreenWidth(), ScreenHeight())
ca suffit pas ??

Publié : mer. 14/déc./2005 15:06
par Fred
GrabSprite() est plus appriorié ici (et beacoup plus rapide).

Publié : mer. 14/déc./2005 16:53
par CameleonTH
Je crois que vous avez pas bien compris ce ke je voulais faire.
Je veut copier le buffer vers un sprite un peu comme un screenshot mais en plus rapide et que sur le Screen.

Les seules qui ont compris c'est lionel_om et Fred bien sur. :D

Et merci pour cette aide.

Publié : ven. 16/déc./2005 10:05
par Mindphazer
@CamelonTH :
je suis allé sur ton site pour te faire plaisir :D
Il est sympa....
Mais pitié, fais-moi plaisir à ton tour : corrige les fautes d'orthographe !!!!!

Publié : jeu. 06/avr./2006 13:09
par Progi1984
@CameleonTH :
as tu un code de tes réussites, cela m'interesserait vivement !

Publié : sam. 20/mai/2006 14:01
par snobw
Salut, cameleonTh

As-tu reussi à faire ce que tu voulais ?

Si oui je serai interressé.

En ce moment j'essai de le faire avec des API windows,
mais sa marche pas (getdc,...)

Publié : sam. 20/mai/2006 22:02
par CameleonTH
Euh en faite depuis j'ai pas réessayer de faire cette effet car j'ai un peu lacher le PureBasic malgré que je l'utilise pour faire des petit prog, mai je l'ai lacher car en ce moment je suis en periode d'étude pour le BAC et j'essai d'apprendre le C++, alors voila.

Publié : dim. 21/mai/2006 6:11
par Thyphoon
Tient j'ai penser a toi ! en regardant sur Purearea je suis tombé sur un truc de BackBuffer... je me demande si ce n'est pas ça que tu voulais.
Voilà le lien:
http://www.purearea.net/pb/CodeArchiv/G ... ndering.pb

Publié : dim. 21/mai/2006 9:55
par snobw
Je viens de jeter un oeil sur ce truc.
C'est pas vraiment cela.

Mon objectif est en faite de faire une capture du bureau.
Cela sans passer par PrintEcran. En gros recréer une nouvelle fonction printscreen.

Mais je pense etre sur la bonne voix

GetDesktopWindow
GetDC
BitBlt
ReleaseDC

je pense que ces api sont la clé.
Des que je trouve, je poste.

Publié : dim. 21/mai/2006 10:00
par Guimauve
Une procédure qui date un peu, je ne l'ai pas tester avec la V4.00.

Code : Tout sélectionner

Procedure ScreenShots(ImageID.l, Screenshot$, ScreenW.w, ScreenH.w)

    ; On capture les informations de l'écran actuelle

     srcDC = CreateDC_("DISPLAY", "", "", dm.DEVMODE)
     trgDC = CreateCompatibleDC_(srcDC)
     BMPHandle.l = CreateCompatibleBitmap_(srcDC, ScreenW, ScreenH)
     SelectObject_(trgDC, BMPHandle)
     BitBlt_(trgDC, 0, 0, ScreenW, ScreenH, srcDC, 0,0, #SRCCOPY)
     DeleteDC_(trgDC)
     ReleaseDC_(BMPHandle, srcDC)
     
     ; On dessine l'image
     CreateImage(ImageID, ScreenW, ScreenH)
     StartDrawing(ImageOutput(ImageID))
          DrawImage(BMPHandle, 0, 0)
     StopDrawing()
     
     SaveImage(ImageID, Screenshot$)
     
EndProcedure
Et pour les dimensions de la résolution de l'écran :

Code : Tout sélectionner

ScreenW = GetSystemMetrics_(#SM_CXSCREEN)
ScreenH = GetSystemMetrics_(#SM_CYSCREEN)
Si ça peut aider quelqu'un

A+
Guimauve