【发布时间】:2012-01-15 02:44:59
【问题描述】:
我正在开发一个用于录制视频并将其预览为 tilelist 的应用程序。有什么方法可以捕获视频帧以用作我列表中的缩略图?我正在使用 Flex 4.5。
【问题讨论】:
标签: video actionscript flex4 thumbnails
我正在开发一个用于录制视频并将其预览为 tilelist 的应用程序。有什么方法可以捕获视频帧以用作我列表中的缩略图?我正在使用 Flex 4.5。
【问题讨论】:
标签: video actionscript flex4 thumbnails
来自this answer:
var frameGrab:BitmapData = new BitmapData(clip.width, clip.height, false, 0);
frameGrab.draw(clip); // the .draw() method will copy the frame from your video.
var frame:Bitmap = new Bitmap(frameGrab);
【讨论】:
我正在寻找的是以下内容:
private function capture(filename:String):void
{
var bitmapData:BitmapData = new BitmapData(videoDisplay.width, videoDisplay.height);
bitmapData.draw(videoDisplay,new Matrix());
var bitmap : Bitmap = new Bitmap(bitmapData);
var jpg:JPEGEncoder = new JPEGEncoder();
var ba:ByteArray = jpg.encode(bitmapData);
var newImage:File = File.desktopDirectory.resolvePath("foldername/"+filename+".jpg");
fileStream = new FileStream();
fileStream.open(newImage, FileMode.UPDATE);
fileStream.writeBytes(ba);
fileStream.close();
}
这是当用户点击录制时调用的方法..所以我抓住一张照片作为拇指!我希望以上内容也能帮助其他寻找类似东西的人...... 非常感谢!
【讨论】:
还有另一种方法:
将事件监听器附加到视频流(即NetStream),如下所示:
var vConnection:NetConnection = new NetConnection();
vConnection.connect(null);
var vStream:NetStream = new NetStream(vConnection);
vStream.addEventListener(NetStatusEvent.NET_STATUS, onNetStatusChange);
监听器看起来像这样:
protected function onNetStatusChange(event:NetStatusEvent):void
{
switch(event.info.code)
{
case "NetStream.Play.Start":
{
vStream.seek(1); // seek to key frame
break;
}
case "NetStream.Video.DimensionChange":
{
// after a dimension change we have a loaded frame
// do whatever you want here, but keep in mind
// that the video needs to be on the display list
// if you want to draw it
break;
}
default: break;
}
}
【讨论】: