4,327
社区成员




package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
import mx.controls.Image;
import mx.core.UIComponent;
public class ImageCut
{
public function ImageCut()
{
}
/**
*
* @param source 源组件
* @param startPoint 裁剪起始点
* @param width 需要裁剪的高度
* @param height 需要裁剪的宽度
* @return 裁剪后的图片
*
*/
public function getCutImage(source:UIComponent, startPoint:Point, width:int = 0, height:int = 0):Image
{
var sourceData:BitmapData = getSourceData(source);
var destData:BitmapData = getDestData( sourceData, startPoint, width, height );
if( !sourceData || ! destData)
return null;
return getImage(destData);
}
/**
*
* @param source 源组件
* @param startPoint 裁剪起始点
* @param width 需要裁剪的高度
* @param height 需要裁剪的宽度
* @return 裁剪后的Bitmap
*
*/
public function getCutBitmap(source:UIComponent, startPoint:Point, width:int = 0, height:int = 0):Bitmap
{
var sourceData:BitmapData = getSourceData(source);
var destData:BitmapData = getDestData( sourceData, startPoint, width, height );
if( !sourceData || ! destData)
return null;
return new Bitmap(destData);
}
/**
*
* @param source 被裁剪的资源
* @return 资源的BitmapData
*
*/
private function getSourceData( source:UIComponent ):BitmapData
{
var sourceData:BitmapData = null;
if( source )
{
sourceData = new BitmapData( source.width, source.height );
sourceData.draw( source );
}
else
return null;
return sourceData;
}
/**
*
* @param _source 资源的BitmapData
* @param _startPoint 裁剪起始点
* @param _width 宽度
* @param _height 高度
* @return 裁剪后的BitmapData
*
*/
private function getDestData( _source:BitmapData, _startPoint:Point , _width:int = 0, _height:int = 0):BitmapData
{
if( _width == 0 || _startPoint.x + _width > _source.width)
_width = _source.width - _startPoint.x;
if( _height == 0 || _startPoint.y + _height > _source.height)
_height = _source.height - _startPoint.y;
var destData:BitmapData = new BitmapData(_width, _height);
var rect:Rectangle = new Rectangle( _startPoint.x, _startPoint.y, _width,_height);
destData.copyPixels( _source, rect , new Point(0,0) );
return destData;
}
/**
* 将BitmapData转换为图片实例
* @param _source BitmapData
* @return 图片实例
*
*/
private function getImage( _source:BitmapData ):Image
{
var bitmap:Bitmap = new Bitmap( _source )
var image:Image = new Image();
image.source = bitmap;
return image;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="1024" minHeight="768">
<mx:Script>
<![CDATA[
import mx.events.FlexEvent;
private var cut:ImageCut = new ImageCut();
protected function img_clickHandler(event:MouseEvent):void
{
createImage(new Point(event.localX,event.localY));
}
private function createImage(point:Point):void
{
var image:Image = cut.getCutImage(test,point);
cont.addChild(image);
}
]]>
</mx:Script>
<mx:HBox id="cont">
<mx:Image id="test"
source="123.jpg"
width="400" height="400"
maintainAspectRatio="false"
click="img_clickHandler(event)"/>
</mx:HBox>
</mx:Application>