views:

216

answers:

2

I need to write a small Flash app that will need to extract a video frame from a playing video. It will not need to be saved to the HDD of the user. I just need to get the image data and display it in the Flash movie. The frame to extract will be chosen by the user, which is why I'd like to do this purely on the client side (though I know I could do it from the server side).

I've tried searching for solutions but I'm not getting any useful results. Being a Flash newbie I haven't got any code yet seeing as I wouldn't know where to start.

So Flash gurus, is there a way to do this?

+4  A: 

If you take a 'screen grab' of a DisplayObject in flash using BitmapData's draw() method.

If you have something for displaying flv somewhere a bit to the right, or down, try something like:

var cloneData:BitmapData = new BitmapData(video.width,video.height,false,0x000000);
cloneData.draw(video);
//test
addChild(new Bitmap(cloneData));

Goodluck!

George Profenza
perfect, thanks a lot - have posted my entire proof of concept for others but this is the answer that lead to a resolution :)
Darko Z
+1  A: 

After reading Georges answer, this is what I came up with as proof of concept. Posting here so it doesn't pollute original question.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="video.load()">
 <mx:VideoDisplay id="video" x="0" y="0" source="/content/content.flv" />
 <mx:Button x="10" y="10" label="Grab" click="grabClick()"/>
 <mx:Button x="71" y="10" label="Play" click="video.play()"/>
 <mx:Button x="130" y="10" label="Pause" click="video.pause()"/>
 <mx:Script>
  <![CDATA[
   import mx.controls.*;
   import flash.display.BitmapData;

   private function grabClick():void {
    var bitdata:BitmapData = new BitmapData(video.width, video.height, false, 0x0);
    bitdata.draw(video);
    var grabResult:Image = new Image();
    grabResult.x = 0;
    grabResult.y = video.height;
    grabResult.source = new Bitmap(bitdata);
    addChild(grabResult);
   }
  ]]>
 </mx:Script> 
</mx:Application>
Darko Z