当前位置: 首页 > 图文教程 > Flash动画 > Flash动画制作 > Flash 8 Professional Copy Pixels位图象素复制

Flash动画制作
巧用超级解霸在Flash V5.0中插入录像
教你用Flash MX来制作简单的课件界面
Flash MX 2004 ActionScript图文教程(二)
Flash MX 2004 ActionScript图文教程(三)
Flash MX 2004 ActionScript图文教程(四)
Flash MX 2004 ActionScript图文教程(五)
Flash MX 2004 ActionScript图文教程(六)
flash场景之间相互跳转的实现方法
Flash本地加密
FLASH -- 关于变量的问题FLASH -- 关于变量的问题
Flash5 画任意直线教程
Flash MX 视频导入功能详解
制作飞舞的蝴蝶
Flash MX 2004 ActionScript图文教程(七)
Flash MX 2004 ActionScript图文教程(八)
Flash MX 2004 ActionScript图文教程(九)
Flash MX 2004 ActionScript图文教程(十)
Flash教程 飞翔的文字
Flash MX 2004 ActionScript图文教程(十一)
制作Flash网站技巧拾零

Flash动画制作 中的 Flash 8 Professional Copy Pixels位图象素复制


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-22   浏览: 74 ::
收藏到网摘: n/a

  除了 8 中自带的各种简单Filter滤镜效果之外,还对bitmapData位图对象提供了非常强大的象素操作。当然,有了象素级的操作,最直接的用途就是我们可以直接控制位图中的每个点,改变他的颜色、位置,能直接创造属于自己的丰富的滤镜,当然,前途是美好的,一定要注意执行效率,虽然Flash Player8的效率已经大为提高,不过我还是在试验各种象素操作中误入超大运算而死机……。

  今天的例子是最为简单的一个得到象素并复制到一个新对象中的操作,不过有了这个功能,位图操作的可能性就无限量了。

  Flash代码:

  import flash.display.*;

  import flash.geom.*;

  //导入本例所需要的二个Pageage

  var sourceBD:BitmapData = BitmapData.loadBitmap(”mypic”);

  //创建bitmapData对象以用于存放源图片,源图已在库中并命名为mypic

  var mc:MovieClip = this.createEmptyMovieClip(”mc”, this.getNextHighestDepth());

  mc._x = 25;

  mc._y = 100;

  mc.attachBitmap(sourceBD,mc.getNextHighestDepth());

  //在Stage上创建空MC,并使用MC的attachBitmap方法将刚才创建的bitmapData对象读取到这个MC中

  var targetBD:BitmapData = new BitmapData(230, 230, false, 111111);

  //创建另一个bitmapData对象作为复制目标

  var mc2:MovieClip = this.createEmptyMovieClip(”mc”, this.getNextHighestDepth());

  mc2._x = 290;

  mc2._y = 100;

  mc2.attachBitmap(targetBD,mc.getNextHighestDepth());

  //同样在Stage上创建空MC用于存放复制目标

  mc.onRollOver = function() {

  //当鼠标移动到拥有源图的MC上时,开始CopyPixels

  copyPixels();

  };

  mc.onRollOut = function() {

  //移出状态停止Copy

  stopcopyPixels();

  };

  //Copy Pixels Function

  function copyPixels() {

  this.onMouseMove = function() {

  setCursor();//设置鼠标光标

  var point:Point = new Point(_xmouse, _ymouse);

  mc.globalToLocal(point);

  //得到当前鼠标座位,并使用globalToLocal转换为MC内部的坐标值

  var rect:Rectangle = new Rectangle(point.x, point.y, 20, 20);

  /*创建一个Rectangle对象用以确定要复制的矩形区域

  Rectangle对象是Flash8中新增对象,包的位置在flash.geom.Rectangle,flash.geom对象除了拥有Rectangle矩形数据对象之外,还有其它用于存放几何数据的对象类型,包括Point,Tranform等

  Rectangle的构造方式为

  public Rectangle(x:Number, y:Number, width:Number, height:Number)

    

  x,y:起始座位

  width,height:矩形的宽和高,最终将建立一个从 x,y到 x+width,y+height的矩形区域数据

  */

  var dest:Point = new Point(point.x, point.y);

  //建立dest对象用于存放目标点

  targetBD.copyPixels(sourceBD,rect,dest);

  /*这里就是本例操作的关键方法,copyPixels,用于将源图中的某个区域的象素复制到当前对象中

  构造方式为public copyPixels(sourceBitmap:BitmapData, sourceRect:Rectangle, destPoint:Point, alphaBitmap:BitmapData, alphaPoint:Point, mergeAlpha:Boolean)

  sourceBitmap:需要复制的源图,为BitmapData对象类型,这里就套用为前面建立的sourceBD

  sourceRect:复制区域

  deskPoint:目标点,明确将区域复制到本对象的哪一个位置,本例中完全还原源图的象素所在位置

  以下几个参数在本例中都没有使用到

  alphaBitmap和alphaPoint:表示可以通过另一个图片用于在复制的时候对源图产生一个alpha通道来创建带alpha通道效果的复制结果.

  mergeAlpha的属性是指是否启用源图的alpha通图,但目前没有调试出具体效果,有待再研究.*/

  };

  }

  function stopcopyPixels() {

  //停止copyPixels

  clearCursor();

  delete this.onMouseMove;

  }

  function setCursor() {