flash.display.BitmapData.draw(source:IBitmapDrawable, matrix:Matrix=null, colorTransform:ColorTransform=null, blendMode:String=null, clipRect:Rectangle=null, smoothing:Boolean=false):void
以前我感觉自己数学挺好的,逻辑思维应该不差,最近受打击了!在理解BitmapData.draw这个方法时,我花了很长时间才真正理解了这个方法,主要是我把matrix里的位移,和clipRect这个参数的功能理解有误差(受另外一个方法copyPixels中sourceRect参数的影响,它的含义和draw中的clipRect有区别)
有两个位图, a,b,a是原图,b想拷贝a图中(50,50)这个坐标开始的长宽都为200的这一块矩形范围。
需要通过var matrix:Matix=new Matix();
matrix.translate(-50,-50);
这个matrix代码是先把原图的所有内容向左向上偏移50像素,这样的话原来在(50,50)坐标的点现在坐标就是(0,0)呢!
var rect:Rectangle=new Rectangle(0,0,100,100);
var bmd:BitmapData=new BitmapData(100,100):
bmd.draw(a,matrix,null,null,rect);
b.bitmapData=bmd;
好了,运行代码,是正确的!这个是我的现在理解,以前的理解是错误的,就不说了!昨天我在一个群里,和一个朋友聊天,我发现他对这个问题的理解是不一样的!但他给出的代码是正确的。呵呵,殊途同归。
现在感觉自己对这些以前不太在意的问题,有了重新理解,现在总算真正明白孔老夫子的“学而不思则罔,思而不学则殆“这种学习方法是多么正确,多么痛的领悟,老是感觉自己进步慢,一部分原因恐怕就是自己思考地太少,对这些比较细的东西,没有真正透彻地思考过。古人的智慧,佩服!
现在总算明白及时归纳总结,及时思考有多么重要!
package
{import flash.display.AVM1Movie;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.net.URLRequest;
import org.flexlite.domUI.components.Rect;
import org.flexlite.domUtils.DomLoader;
[SWF(width="1000",height="800",backgroundColor="#0000cc")]
public class Test extends Sprite
{
private var _url1:String="assets/2097207_194613022_1.jpg";
private var _url2:String="assets/31950_142102373152_1.jpg";
private var _swfUrl:String="assets/243373236374442.swf";
private var _urlRequest:URLRequest;
private var _loader:Loader;
private var _picUrlArr:Array=new Array(_url1,_url2);
private var _ppt:pptIcon=new pptIcon;
public function Test()
{
var myObj:Array =[100,200];
for (var i:String in myObj) {
trace (i);
}
//DomLoader.loadMultiBitmapDatas(_picUrlArr,loadSuccessHandler);
_urlRequest=new URLRequest(_url1);
_loader=new Loader;
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadSuccessHandler);
_loader.load(_urlRequest);
}
private function loadSuccessHandler(event:Event):void
{
var bm:Bitmap=_loader.content as Bitmap;
var newBm:Bitmap=new Bitmap;
var newBm2:Bitmap=new Bitmap;
this.addChild(bm);
var w:int=100;
var h:int=100;
var distance:int=50;
var matrix:Matrix=new Matrix;
matrix.translate(-distance,-distance);
var rect:Rectangle=new Rectangle(0,0,w,h);
var rect2:Rectangle=new Rectangle(distance,distance,100,100);
var bmd:BitmapData=new BitmapData(w,h);
bmd.draw(bm,matrix,null,null,rect);
newBm.bitmapData=bmd;
this.addChild(newBm);
trace(newBm.width,newBm.height);
newBm.y=200;
trace(bm.width,bm.height);
var newbmd2:BitmapData=new BitmapData(w,h);
newbmd2.copyPixels(bm.bitmapData,rect2,new Point(0,0));
newBm2.bitmapData=newbmd2;
this.addChild(newBm2);
newBm2.y=350;
}
}
}