用Flex程序开发截屏功能

在最近的Flex项目中需要做个屏幕截图功能,然后保存为图片文件,以前好像在哪里看到这样的例子,找了半天没找着,其实实现起来也挺简单的。

具体步骤如下:

  • 创建一个BitmapData对象
  • 拷贝目标组件的象素数据到BitmapData对象上
  • 转换BitmapData对象为PNG编码的ByteArray (需要用到PNGEnc库)
  • 转换ByteArray为Base64Encoded字符串,这样便于发送数据给后台处理
  • 在后台程序中(如PHP等),对数据解码然后写入文件

PNG Encoder 库是由Tinic Uro编写的。

这里是Flex代码:


<? xml version="1.0" encoding="utf-8" ?>
< mx:Application  xmlns:mx ="http://www.adobe.com/2006/mxml"  layout ="absolute" >
< mx:Script >
<![CDATA[
import mx.utils.Base64Encoder;
import mx.rpc.events.ResultEvent;
import mx.utils.ObjectUtil;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.core.UIComponent;

public function onResult(event:ResultEvent) :void
{
Alert.show(ObjectUtil.toString(event.result));
}

public function onFault(event:FaultEvent) :void
{
Alert.show("Got error: "+event.message);
}

public function takeSnapshot(target:UIComponent) :void
{
var bd:BitmapData = new BitmapData(target.width,target.height);
bd.draw(target);
var ba:ByteArray = PNGEnc.encode(bd);
var be:Base64Encoder = new Base64Encoder();
be.encodeBytes(ba);
var encodedData:String = be.flush();
ro.saveImage(encodedData);
}
]]>

</ mx:Script >

< mx:Button  click ="takeSnapshot(targetPanel)"  label ="Save Image"  x ="10"  y ="100" />

< mx:Panel  id ="targetPanel" >
< mx:Canvas  backgroundColor ="#EEEEEE" >
< mx:Label  text ="Hello World"   />
</ mx:Canvas >
</ mx:Panel >

< mx:RemoteObject  id ="ro"  destination ="serviceEndpoint"  result ="onResult(event)"  fault ="onFault(event)" />
</ mx:Application >

后台的PHP代码:

public   function  saveImage( $encodedPNGData )
{
if  ( $encodedPNGData   !=   "" )
{
$binaryData   =   base64_decode ( $encodedPNGData );
$file   =   " assets/images/something.png " ;
file_put_contents ( $file ,   $binaryData );
return   $file ;
}
return   null ;
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值