as3中bitmapData中draw方法重新理解

原创 2015年07月07日 21:07:05

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;
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

强大的bitmapData.draw()

draw()方法 public function draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:ColorTran...
  • xiang08
  • xiang08
  • 2009年08月04日 14:12
  • 12563

关于bitmapData.draw的一点心得

bitmapData.draw的对象如果已经缩放了,比如2倍,那么draw的时候需要传递matrix.scale(2,2);bmd.draw(_ppt,matrix);我以前不是这么理解的,今天在做一...
  • u013406800
  • u013406800
  • 2015年06月22日 21:03
  • 495

位图——Bitmap和BitmapData(一)

    AS3中的Bitmap类对象代表了位图,而位图的所有的像素信息,存储在Bitmap对象的bitmapData属性持有的BitmapData对象中。BitmapData对象并不是显示对象(Dis...
  • sycflash
  • sycflash
  • 2010年01月01日 11:08
  • 5588

C# BitmapData使用

C# BitmapData使用
  • chenhongwu666
  • chenhongwu666
  • 2015年01月20日 12:31
  • 12946

Bitmap图片处理的效率----BitmapData

一、在图片处理时,如果每次都是对Bitmap的对象进行直接处理,效率不高。 二、改进: 在每次处理图像之前,对其进行lock,生成对应的BitmapData对象。  ( 注:    ...
  • qq_23992597
  • qq_23992597
  • 2016年06月02日 17:59
  • 1556

Flex 图片和文字转化为BitmapData数据

Flex 图片和文字转化为BitmapData数据
  • u010534192
  • u010534192
  • 2016年11月20日 15:17
  • 682

使用C#的BitmapData

 我在前两篇图片处理的文章里几乎都用BitmapData来做图片处理的,那么这个东东究竟是个什么玩意儿呢?C#好是好,但处理图片时一个像素一个像素的操作像素可不是一般的慢,尤其是数码相机拍摄的大图片。...
  • ki1381
  • ki1381
  • 2007年01月10日 01:30
  • 9225

转:如何将Sprite对象转换成BitmapData

可以先创建一个和Sprite对象同宽同高的不含任何内容的BitmapData对象,再用BitmapData对象的draw()方法,代码如下:var sprite:Sprite=new Sprite()...
  • jomoonrain2
  • jomoonrain2
  • 2010年03月31日 12:25
  • 3073

细说 BitmapData

如果你是刚接触as编程或者现在只接触flex开发 ,或许你会对BitmapData 不太了解,也或许你会对它不屑一顾。 但作为一个资深的as开发者,无论是游戏 开发还是web应用。 Bit...
  • caijing3210
  • caijing3210
  • 2010年10月26日 19:27
  • 1230

BitmapData类

使用C#进行图像处理的几种方法本文讨论了C#图像处理中Bitmap类、BitmapData类和unsafe代码的使用以及字节对齐问题。 Bitmap类命名空间:System.Drawing封装 GDI...
  • zhangj1012003_2007
  • zhangj1012003_2007
  • 2011年03月28日 11:13
  • 3038
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:as3中bitmapData中draw方法重新理解
举报原因:
原因补充:

(最多只允许输入30个字)