flex截图 java保存


 flex截图是用mx.graphics.ImageSnapshot类的captureBitmapData方法实现的。给java传码是用Base64进行传码,处理流程如下:

      1、获取想要截取区域的像素集合,填充到一个BitmapData中

        源码:http://bbs.airia.cn/forum.php?mod=viewthread&tid=12297&highlight=%CD%BC%C6%AC 

         也可以在这里下载

//获取缩放选择框内的图像
			private function getImg():BitmapData{
				//截取整个区域
				box.scaleEnable = false;
				var bmp:BitmapData = ImageSnapshot.captureBitmapData(canvas);
				box.scaleEnable = true;
				
				//矩形为要截取区域                
                var re:Rectangle = new Rectangle(box.x+LINE_WIDTH,box.y+LINE_WIDTH,box.boxWidth-LINE_WIDTH,box.boxHeight-LINE_WIDTH); 
                var bytearray:ByteArray = new ByteArray();   
                //截取出所选区域的像素集合                        
                bytearray = bmp.getPixels(re); 
                
                
                var imgBD:BitmapData = new BitmapData(box.boxWidth-LINE_WIDTH,box.boxHeight-LINE_WIDTH);       
                //当前的bytearray.position为最大长度,要设为从0开始读取       
                bytearray.position=0;            
                var fillre:Rectangle = new Rectangle(0,0,box.boxWidth-LINE_WIDTH,box.boxHeight-LINE_WIDTH);
                //将截取出的像素集合存在新的bitmapdata里,大小和截取区域一样
                imgBD.setPixels(fillre,bytearray);
                
                return imgBD;
			}

     2、传输图片内容,使用的Base64的好处:能在java以字符串的形式进行接收         

                        var jpg :JPEGEncoder = new JPEGEncoder();
			var jpgByteArray : ByteArray = jpg.encode(getImg());
			var Base64:Base64Encoder=new Base64Encoder;//将字符串或 ByteArray 编码为 Base64 编码的字符串。       
			Base64.encodeBytes(jpgByteArray)
			var imageStr:String=Base64.toString();//输出为字符串  
//			Alert.show(""+imageStr);
			xxxProxy.load(imageStr);

    xxx Proxy是PureMVC中的Proxy的一个实例。

    http://blog.flexexamples.com/2008/03/17/displaying-an-image-saved-as-a-base64-encoded-string-in-flex-3/可以把Alert弹出的字符串放到logo.txt进行验证

     也可以点这里进行下载

 

   3、java端接收字符串进行处理 

   

public ActionForward exportImg(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception
    {
        Map<String, Object> rsMap = new HashMap<String, Object>();
        try {
            String imageStr = request.getParameter("imageStr");
         
            String id = request.getParameter("id");
            //            String imagename = System.currentTimeMillis() + ".png";
            BASE64Decoder decoder = new BASE64Decoder();
                //Base64解码
                byte[] b = decoder.decodeBuffer(imageStr);
                
                for(int i=0;i<b.length;++i)
                {
                    if(b[i]<0)
                    {//调整异常数据
                       // System.out.println("11"+b[i]);
                        b[i]+=256;
                       // System.out.println("22"+b[i]);
                    }
                }
 
            String imagename = id + ".png";//
            response.setContentType("image/jpg");
            response.setContentType("application/ms-excel");
            response.setHeader("Content-Disposition", "attachment;filename="
                    + new String(imagename.getBytes(), "iso-8859-1"));
            String imgView = "soc/Resources/Thumbnail/deployexport/" + imagename;
            File imgFile = new File(path + imgView);
            FileOutputStream fos = new FileOutputStream(imgFile);
            fos.write(b);
            fos.flush();
            fos.close();
//          
        }
        catch (Exception e) {
        }
        return null;

    

4、存在问题:

     (1) 不清晰 尤其是存在文字时 有锯齿

     (2) 控制截取区域的控件不能超过屏幕大小,否报错

     (3) 要是存在java保存的图片背景是黑色的问题,应该先检查下Flex截取图片的背景。 若问题在Flex,则要检查Canvas的背景是否为空,或者默认值为0x000000。若存在不  能给Canvas的背景赋值,可以结合背景透明度进行设置,也就是给背景赋值,透明度为0或者很小的数。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhchyun2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值