游戏地图分块加载资源篇——切图工具

package code.imageDivied
{
import com.cg.as3.data.encoder.JPEGEncoder;

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.utils.ByteArray;

import mx.controls.Alert;

/**
* 切图工具功能类 
* @author Semon
* @Email sxw52039@qq.com
*/
public class ImageDivided
{
   private var _target:BitmapData;
   private var _width:Number;
   private var _height:Number;
   private var _imageWidth:Number;
   private var _imageHeight:Number;
   private var _savePath:String;
   /**
   * 构造函数 
   * @param target 大地图对象
   * @param width 小块地图的宽
   * @param height 小块地图的高
   * @param savePath 设定的保存路径,格式如(D:/tools/)
   * 
   */  
   public function ImageDivided(target:BitmapData,width:Number,height:Number,savePath:String)
   {
    if(target!=null&&width>0&&height>0&&savePath!="")
    {
     _target=target;
     _width=width;
     _height=height;
     _savePath=savePath;
     _imageWidth=_target.width;
     _imageHeight=_target.height;
    }
    else throw new Error("参数不正确!");
   }
  
   /**
   * 主要功能是将大图切成小图 
   * 功能类JPEGEncoder可网络上下载
   */  
   public function start():void
   {
    var spanX:Number=Math.floor(_imageWidth/_width);
    var spanY:Number=Math.floor(_imageHeight/_height);
    var wleave:Number=_imageWidth%_width;
    var hleave:Number=_imageHeight%_height;
    var width:Number=_width;
    for(var i:uint=0;i<spanY;i++)
    {
     if(i==spanY-1&&hleave!=0) height=hleave; 
     var height:Number=_height;
     for(var j:uint=0;j<spanX;j++)
     {
      if(j==spanX-1&&wleave!=0) width=wleave;
      var bmp:BitmapData=new BitmapData(width,height);
      bmp.draw(_target,new Matrix(1,0,0,1,-j*width,-i*height),null,null,new Rectangle(0,0,width,height));
      var jpe:JPEGEncoder = new JPEGEncoder(80);
      savePicture(jpe.encode(bmp),i+"_"+j+".jpeg");
     }
    }
    Alert.show("Success","Message");
   }
  
   /**
   * 保存 图片到本地
   * @param data 经过格式化的图片数据
   * @param fileName 指定的文件名
   * 
   */  
   private function savePicture(data:ByteArray,fileName:String):void
   {
    var fl:File = File.desktopDirectory.resolvePath(_savePath+fileName);
    var fs:FileStream = new FileStream();
    try
    {
     fs.open(fl,FileMode.WRITE);
     fs.writeBytes(data);
     fs.close();
    }
    catch(e:Error)
    {
     Alert.show(fileName+"保存失败","Message");
    }  
   }
}
}



转的好东东


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值