首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何截取VideoDisplay的屏幕截图?

如何截取VideoDisplay的屏幕截图?
EN

Stack Overflow用户
提问于 2010-03-02 17:37:45
回答 2查看 3K关注 0票数 1

我想建立一个组件,在那里用户可以播放一个Flex中的视频。会有一个按钮,每当按钮被按下时,我想保存VideoDisplay的当前时间加上一个屏幕截图。屏幕截图需要以某种方式保存,因为我想显示所有的时间和屏幕截图在一个DataGrid (屏幕截图应该出现时,用户悬停在DataGrid中的时间)。

那么,我该如何截取火花VideoDisplay的屏幕截图并保存/显示它们呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-02 18:12:41

您可以通过几种方式拍摄快照,这种方法只使用ImageSnapshot类,但如果您愿意,也可以通过手动绘制视频显示的位图来完成此操作。下面是一个示例:

渲染器

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer 
    xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    width="100" height="100" creationComplete="trace(data)">

    <mx:Image source="{this.data}" width="100%" height="100%"/>

</s:ItemRenderer>

示例应用程序

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx">

    <fx:Script>
        <![CDATA[

            import mx.graphics.ImageSnapshot;

            public function takeSnapshot():void
            {
                var snapshot:BitmapData = ImageSnapshot.captureBitmapData(videoDisplay);
                var bitmap:Bitmap = new Bitmap(snapshot);
                list.dataProvider.addItem(bitmap);
            }
        ]]>
    </fx:Script>

    <s:layout>
        <s:VerticalLayout horizontalAlign="center"/>
    </s:layout>

    <s:VideoDisplay id="videoDisplay"
        source="video.mov"
        width="400" height="300"/>

    <s:Button id="button" click="takeSnapshot()"/>

    <s:List id="list" horizontalCenter="0" width="100%" itemRenderer="SnapshotRenderer">
        <s:dataProvider>
            <mx:ArrayList/>
        </s:dataProvider>
        <s:layout>
            <s:TileLayout/>
        </s:layout>
    </s:List>
</s:Application>

为了准确实现您所描述的内容(拍摄快照和保存快照),您可以将它们存储在takeSnapshot方法中的数组中,或者您可以遍历list.dataProvider以获取位图。然后你只需要把它们传递给后端语言(ruby,python,php…)来保存。

希望这能帮上忙,兰斯

票数 3
EN

Stack Overflow用户

发布于 2010-10-20 11:17:46

使用flex中的JPEGEncoder将其转换为字节数组,然后使用b64encoder对字节数组进行编码,如下所示:

代码语言:javascript
复制
var jpg:JPEGEncoder = new JPEGEncoder();
var ba:ByteArray = jpg.encode(bitmapData);        

var b64encoder:Base64Encoder = new Base64Encoder();
b64encoder.encodeBytes(ba);
var b64String:String = b64encoder.flush();

现在,您可以通过HTTP post方法将b64String传递给服务器:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2362128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档