2

我需要编写一个需要从正在播放的视频中提取视频帧的小型 Flash 应用程序。它不需要保存到用户的硬盘中。我只需要获取图像数据并将其显示在 Flash 电影中。要提取的帧将由用户选择,这就是为什么我想纯粹在客户端执行此操作(尽管我知道我可以从服务器端执行此操作)。

我试过寻找解决方案,但没有得到任何有用的结果。作为一个 Flash 新手,我还没有看到任何代码,因为我不知道从哪里开始。

那么Flash大师,有没有办法做到这一点?

4

2 回答 2

4

如果您使用BitmapData 的 draw() 方法对 Flash 中的 DisplayObject 进行“屏幕抓取” 。

如果您有一些东西可以在右侧或下方的某处显示 flv,请尝试以下操作:

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

祝你好运!

于 2009-12-29T01:42:54.300 回答
3

在阅读 Georges 的回答后,这就是我提出的概念证明。在此处发布,以免污染原始问题。

<?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>
于 2009-12-29T02:19:48.860 回答