Page 1 sur 1

Récupérer une image d'une video

Publié : ven. 17/avr./2009 12:55
par lepiaf31
Bonjour à tous ! :)

Je cherche un moyen pour "extraire" une image d'une video. J'ai essayé de lire la video sur un sprite à l'aide de la fonction RenderMovieFrame() puis d'enregistrer le sprite grâce à SaveSprite() mais la fonction RenderMovieFrame() n'a pas l'air de fonctionner avec les videos au format DivX.
Si quelqu'un saurait comment faire, je serais ravi :p

Merci


EDIT: Bon j'ai trouvé un ptit code sympa sur purearea:
http://www.purearea.net/pb/CodeArchiv/M ... nverter.pb

EDIT2: probleme: lecode que j'ai trouvé ne marche que pour les videos de type avi et je voudrais que cela soit compatible qvec d'autres formats

Re: Récupérer une image d'une video

Publié : ven. 17/avr./2009 16:19
par beauregard
lepiaf31 a écrit :EDIT2: probleme: lecode que j'ai trouvé ne marche que pour les videos de type avi et je voudrais que cela soit compatible qvec d'autres formats
bonjour, Free video converter est un logiciel gratuit de convertion.

Publié : ven. 17/avr./2009 22:53
par Ollivier
Voici un code récupéré ici.

Code : Tout sélectionner

Structure PB_StructureMovie
  Movie.IGraphBuilder
  MediaControl.IMediaControl
  MediaEvent.IMediaEventEx
  Window.IVideoWindow
  Audio.IBasicAudio
  Video.IBasicVideo
  MediaSeeking.IMediaSeeking
  state.l
EndStructure

Procedure.l CaptureFrame(MovieNumber, ImageNumber)
  Protected *Movie.PB_StructureMovie, *Video.IBasicVideo, *Window.IVideoWindow
  Protected *ImageData.BITMAPINFOHEADER, DataSize, Parent, Result
 
  *Movie  = IsMovie(MovieNumber) 
  *Movie  + MovieNumber * SizeOf(PB_StructureMovie)
  *Window = *Movie\Window
  *Video  = *Movie\Video
 
  Result  = 0
 
  If *Video\GetCurrentImage(@DataSize, 0) = #S_OK
   
    *ImageData = AllocateMemory(DataSize)
    If *ImageData
     
      If *Video\GetCurrentImage(@DataSize, *ImageData) = #S_OK
       
        If IsImage( ImageNumber )
          hBmp  = ImageID( ImageNumber )
         
          w = ImageWidth(ImageNumber)
          h = ImageHeight(ImageNumber)
         
          bmi.BITMAPINFO
          bmi\bmiHeader\biSize   = SizeOf(BITMAPINFOHEADER)
          bmi\bmiHeader\biWidth  = w
          bmi\bmiHeader\biHeight = h
          bmi\bmiHeader\biPlanes = 1
         
          bmi\bmiHeader\biBitCount = ImageDepth(ImageNumber)
          bmi\bmiHeader\biBitCount = 32
          bmi\bmiHeader\biCompression = #BI_RGB
         
          hdc = StartDrawing(ImageOutput(ImageNumber))
          If hdc
            SetDIBits_( hdc, hBmp, 0, h, *ImageData, @bmi, #DIB_RGB_COLORS)
            StopDrawing()
          EndIf
        EndIf
      EndIf
     
      FreeMemory(*ImageData)
    EndIf
   
  EndIf   
 
  *Window\get_Owner(@Parent)
  RedrawWindow_(Parent,0,0,#RDW_INVALIDATE)
  ProcedureReturn Result
EndProcedure