Screenshot to sprite?

Just starting out? Need help? Post your questions and find answers here.
Kale
PureBasic Expert
PureBasic Expert
Posts: 3000
Joined: Fri Apr 25, 2003 6:03 pm
Location: Lincoln, UK
Contact:

Screenshot to sprite?

Post by Kale »

Any ideas how i can make a screenshot then make a 3dsprite from it during runtime? This doesn't seem to work:

Code: Select all

;capture a piece of screen
Procedure.l CaptureScreen(Left.l, Top.l, Width.l, Height.l)
    dm.DEVMODE
    BMPHandle.l
    srcDC = CreateDC_("DISPLAY", "", "", dm)
    trgDC = CreateCompatibleDC_(srcDC)
    BMPHandle = CreateCompatibleBitmap_(srcDC, Width, Height)
    SelectObject_( trgDC, BMPHandle)
    BitBlt_( trgDC, 0, 0, Width, Height, srcDC, Left, Top, #SRCCOPY)
    OpenClipboard_(#NULL) 
    EmptyClipboard_()
    SetClipboardData_(2, BMPHandle)
    CloseClipboard_()
    DeleteDC_( trgDC)
    ReleaseDC_( BMPHandle, srcDC)
    ProcedureReturn BMPHandle
EndProcedure
...
ScreenCaptureAddress = CaptureScreen(192, 112, 256, 256)
CatchSprite(1, ScreenCaptureAddress, #PB_Sprite_Texture)
CreateSprite3D(1, 1)
...
It just seems to crash at the CatchSprite command :(
--Kale

Image
Fred
Administrator
Administrator
Posts: 18351
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Post by Fred »

This can't work as CatchSprite expect a BMP or other supported image format. But you could do it easily by using the StartDrawing(SpriteOutput()) combo and then blit you screenshot on it (will probably work with DrawImage() BTW).
Kale
PureBasic Expert
PureBasic Expert
Posts: 3000
Joined: Fri Apr 25, 2003 6:03 pm
Location: Lincoln, UK
Contact:

Post by Kale »

Did it like this, ta to Fred :)

Code: Select all

Procedure.l CaptureScreen(Left.l, Top.l, Width.l, Height.l)
    dm.DEVMODE
    BMPHandle.l
    srcDC = CreateDC_("DISPLAY", "", "", dm)
    trgDC = CreateCompatibleDC_(srcDC)
    BMPHandle = CreateCompatibleBitmap_(srcDC, Width, Height)
    SelectObject_( trgDC, BMPHandle)
    BitBlt_( trgDC, 0, 0, Width, Height, srcDC, Left, Top, #SRCCOPY)
    DeleteDC_( trgDC)
    ReleaseDC_( BMPHandle, srcDC)
    ProcedureReturn BMPHandle
EndProcedure

CreateSprite(1, 256, 256, 0)

ScreenCaptureAddress = CaptureScreen(192, 112, 256, 256)

StartDrawing(SpriteOutput(1))
    DrawImage(ScreenCaptureAddress, 0, 0)
StopDrawing()
--Kale

Image
Post Reply