您的位置:首页 > 其它

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

2011-12-30 14:43 495 查看
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");
}
}
}
}


转的好东东
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: