Seite 2 von 2

Verfasst: 27.09.2006 12:30
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*

Verfasst: 27.09.2006 12:32
von roherter
wenn directx benutzt wird denke ich mal das du mit dieser methode alt+druck nur ein schwarzes fenster bekommst?

Verfasst: 27.09.2006 15:02
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

Verfasst: 27.09.2006 15:03
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.

Verfasst: 27.09.2006 15:03
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.

Verfasst: 17.05.2007 12:00
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?

Verfasst: 17.05.2007 12:56
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!