Von einem Movie einen Screenshot machen

Anfängerfragen zum Programmieren mit PureBasic.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

Beitrag von smateja »

evlt könntest ja ne art macro mit pb realisieren das die drucken taste drückt - dann start -> ausführen -> mspaint aufruft und dann strg+c drückt

ne mal im ernst - ich guck mal bei api befehlen nach dass man irgendwie evtl das aktive fenster bestimmt und da dann geziehlt irgendwie abgreift - das könnte evlt n ansatz sein - vielleicht habe ich bis ehute abend schon mehr - interessiert mich jetzt auch gerade G*
PB 4.6 / 32 Bit / 64 Bit
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

wenn directx benutzt wird denke ich mal das du mit dieser methode alt+druck nur ein schwarzes fenster bekommst?
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
inc.
Beiträge: 348
Registriert: 27.10.2004 12:25

Beitrag von inc. »

Schau mal hier oder im engl. board nach meinem PB Diresctshow include.
Da ist auch eine Routine drin, um einen Screen zu capturen.

EDIT: http://www.purebasic.fr/english/viewtop ... directshow
Zuletzt geändert von inc. am 27.09.2006 15:05, insgesamt 1-mal geändert.
Hier gibts die OOP Option für PureBasic.
Benutzeravatar
Vallan
Beiträge: 223
Registriert: 20.01.2006 19:34
Kontaktdaten:

Beitrag von Vallan »

Screen Capturen mit: GrapSprite()

MEin Wlan bricht immer zusammenkan also leine Langen Beiträge schreibn. ich bitte mienen RL Freund den Code zu Posten.
Zuletzt geändert von Vallan am 27.09.2006 15:04, insgesamt 1-mal geändert.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Von Vallan, ich poste es,
weil seine Internetverbindung bei langen Paketen
immer mal kurz nen Hänger hat.

Unterschiedlich. Man kann das bild aber auch mit RenderMovieFrame() auf ein Sprite rendern. Allerdings nicht alle Sorten von movies. (Ich dachte von ner DVD, Das geht nämlich nicht mit PB.)



Code Braucht einen Film, und die Ogre Lib.

Code: Alles auswählen


InitEngine3D()
InitSprite()
InitMouse()
InitKeyboard()
InitSound()
InitMovie()



OpenScreen(800,600,32,"Movie Cube")



Add3DArchive("data\",#PB_3DArchive_FileSystem )
#TextureName_SkyDone = "clouds.jpg"


    SkyDome(#TextureName_SkyDone, 1)

    CreateCamera(0,0,0,100,100)
    CameraLocate(0,0,0,50)

   Sprite = CreateSprite(1, 320, 320, #PB_Sprite_Texture)
  CreateTexture(1, 320, 320)
     CreateSprite(2, 320, 320,0)
     CreateSprite(3, 800, 600,0)
CreateMaterial(1, TextureID(1))



;{ Create Cube
CreateMesh(0) ; Cube
SetMeshData(0, 0, ?CubePoints       , 48)
SetMeshData(0, 1, ?CubeTriangles    , 12)
SetMeshData(0, 2, ?CubeTextures     , 4);64)
SetMeshData(0, 3, ?CubeNormales     , 64)

    CreateCamera(0,0,0,100,100)
    CameraLocate(0,0,0,50)





DataSection

CubePoints:
Data.f -10,-10,-10   
Data.f -10,-10,10
Data.f 10,-10,10
Data.f 10,-10,-10

Data.f -10,10,-10
Data.f -10,10,10
Data.f 10,10,10
Data.f 10,10,-10

Data.f -10,-10,-10
Data.f -10,-10,10
Data.f 10,-10,10
Data.f 10,-10,-10

Data.f -10,10,-10
Data.f -10,10,10
Data.f 10,10,10
Data.f 10,10,-10

CubeNormales:
Data.f -0.5,0,-0.5
Data.f -0.5,0,0.5
Data.f 0.5,0,0.5
Data.f 0.5,0,-0.5
Data.f -0.5,0,-0.5
Data.f -0.5,0,0.5
Data.f 0.5,0,0.5
Data.f 0.5,0,-0.5
Data.f 0,1,0
Data.f 0,1,0
Data.f 0,1,0
Data.f 0,1,0
Data.f 0,-1,0
Data.f 0,-1,0
Data.f 0,-1,0
Data.f 0,-1,0

CubeTriangles:
Data.w 0,4,7
Data.w 0,7,3
Data.w 1,5,4
Data.w 1,4,0
Data.w 2,6,5
Data.w 2,5,1
Data.w 3,7,6
Data.w 3,6,2
Data.w 9,8,11
Data.w 9,11,10
Data.w 12,13,14
Data.w 12,14,15






CubeTextures:
Data.f 0,0
Data.f 0,1
Data.f 1,1
Data.f 1,0

Data.f 0,0
Data.f 0,1
Data.f 1,1
Data.f 1,0

Data.f 0,0
Data.f 0,1
Data.f 1,1
Data.f 1,0

Data.f 0,0
Data.f 0,1
Data.f 1,1
Data.f 1,0

EndDataSection

CreateEntity(0, MeshID(0), MaterialID(1))

;}





LoadMovie(0,"1.avi" )    ;OpenFileRequester()  Hier Das movie

PlayMovie(0, #PB_Movie_Rendered)       
    
    
 
        Image = CreateImage(1,320,320)       

        
     
   DC.l = GetDC_(ScreenID())     
Repeat
          
FlipBuffers()
ClearScreen(0,0,0)
          
ExamineKeyboard()
ExamineMouse()
          ;

RotateEntity(0,0.1,0.1,0.1)




      If KeyboardPushed(#PB_Key_Left)
          KeyX = -1
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = 1
        Else
          KeyX = 0
        EndIf
                  
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -1
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = 1
        Else
          KeyY = 0
        EndIf


 ;     KeyZ = MouseWheel()*50

      
RotateCamera(0,-1*MouseDeltaX(),-1*MouseDeltaY(),0)
MoveCamera(0, KeyX, KeyZ, KeyY)


 

RenderWorld()
GrabSprite(3, 0, 0, 800, 600 )
ClearScreen(0,0,0)


RenderMovieFrame(Sprite)

;MovieInfo(0)
DisplaySprite(1,0,0)





; make ScreenShot
hDC = StartDrawing(ImageOutput())
   BitBlt_(hDC,0,0,320,320,GetDC_(GetDesktopWindow_()),0,0,#SRCCOPY)
StopDrawing()



;
; StartDrawing(SpriteOutput(1))
; For x = 0 To 319
; For y = 0 To 199
; Arrey(x,y) = Point(x,y)
; Next
; Next
; StopDrawing()
;
; StartDrawing(TextureOutput(1))
; For x = 0 To 319
; For y = 0 To 199
; Plot(x,y,Arrey(x,y))
; Next
; Next
; StopDrawing()

ClearScreen(0,0,0)
;
; StartDrawing(ScreenOutput())
; DrawImage(1,0,0)
; StopDrawing()






StartDrawing(TextureOutput(1))
;ResizeImage(1, 640,640 )
DrawImage(ImageID(),0,0,512,512);Box(0,0,640,640,RGB(255,255,0));
StopDrawing()
StartDrawing(ScreenOutput())
;DrawImage(ImageID(),0,0)
StopDrawing()

ClearScreen(0,0,0)

DisplaySprite(3,0,0)
DisplaySprite(1,0,0)

Until KeyboardPushed(#PB_Key_Escape)
ReleaseDC_(ScreenID(),DC)

End
Der code ist ein bisschen älter Die Textur Parameter stimmen nicht, PB 3.94. Der film wird erst auf ein Sprite dann auf den Screen und dann zu einem Image gegrappt, da ich keine Möglichkeit kenne ein Sprite (schnell) zu einem Image zu machen, und dann auf dieTextur gemahlt.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Ne Idee, wie das in PB 4.x aussehen müsste?

Hab am Ende irgendein :? POLINK-Fehler gehabt

Es muss doch eine einfachre Möglichkeit geben zum Beispiel ein GIF als Image zu verwenden. Als immer gleich einen Screen zu initialisieren.

/:-> Jemand einen Vorschlag?
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Mein Gott, dass jemand meinen (ich war damals ComputerFreak_PB) alten Thread rausgesucht hat....

@Xaby: keine Ahnung. Ich hatte damals auch immer einen POLINK error bekommen

@Mods: Falls der Account ComputerFreak_PB noch existiert, könnt ihr ihn löschen! Ich benutze nur noch den PureBasic4.0!
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Antworten