1.位图使用(模糊)滤镜

//创建一个矩形区域的BitmapData 
var bmd:BitmapData = new BitmapData(80, 30, false, 0xefefef);

//画个红色的矩形
var rect:Rectangle = new Rectangle(20, 10, 40, 10); 
bmd.fillRect(rect, 0xFF0000);

//找到红色矩形的右上顶点 
var pt:Point = new Point(rect.left, rect.top);

//定义一个模糊滤镜 
var filter:BlurFilter = new BlurFilter(8,8,1);

//应用滤镜 
bmd.applyFilter(bmd, rect, pt, filter);

//创建一个位图对象,并加入到舞台 
var bm:Bitmap = new Bitmap(bmd);

bm.scaleX = bm.scaleY = 2.0; 
bm.x = stage.stageWidth/2 -bm.width/2; 
bm.y = stage.stageHeight/2 - bm.height/2 ;

addChild(bm);

2.像素拷贝及赋值

var bmd1:BitmapData = new BitmapData(90, 60, false, 0x00000000); 
var bmd2:BitmapData = bmd1.clone();//拷贝

//"画"一条白色的线 
for(var i:uint=10;i<=40;i++){
bmd1.setPixel32(i, i, 0xFFFFFFFF);
}

trace(bmd1.getPixel32(10, 10).toString(16)); // ffffffff 
trace(bmd2.getPixel32(10, 10).toString(16)); // ff000000

var bm1:Bitmap = new Bitmap(bmd1);
this.addChild(bm1); 
bm1.x =bm1.y = 5;

var bm2:Bitmap = new Bitmap(bmd2);
bm2.x = 105; 
bm2.y =5;
this.addChild(bm2);

3.颜色变换

var bmd:BitmapData = new BitmapData(80, 30, false, 0xFF0000);

var cTransform:ColorTransform = new ColorTransform(); 
cTransform.alphaMultiplier = 0.8;//设置透明度因子为0.8 
var rect:Rectangle = new Rectangle(0, 0, 40, 30);//定义左半边矩形区域 
bmd.colorTransform(rect, cTransform);//对rect区域应用colorTransform

var bm:Bitmap = new Bitmap(bmd);
addChild(bm);

bm.x = stage.stageWidth/2 - bm.width/2; 
bm.y = stage.stageHeight/2 - bm.height/2;

4.比较位图差异

var bmd1:BitmapData = new BitmapData(50, 50, true, 0xFFFFAA00); 
var bmd2:BitmapData = new BitmapData(50, 50, true, 0xCCFFAA00); 
var diffBmpData:BitmapData = BitmapData(bmd1.compare(bmd2)); 
var diffValue:String = diffBmpData.getPixel32(1, 1).toString(16); 
//解释:当二个位置尺寸大小相同,且仅alpha分量不同时,compare的值为 zzFFFFFF,其中zz为bmd1与bmd2的alpha分量差 
trace (diffValue); // 33ffffff

var bm1:Bitmap = new Bitmap(bmd1); 
addChild(bm1);
bm1.x = bm1.y = 5;
var bm2:Bitmap = new Bitmap(bmd2); 
addChild(bm2);
bm2.x = 60;
bm2.y = 5;

var bmDiff = new Bitmap(diffBmpData);
addChild(bmDiff); 
bmDiff.x = 115;
bmDiff.y = 5;

var bmd1:BitmapData = new BitmapData(50, 50, true, 0xFF00FF99); 
var bmd2:BitmapData = new BitmapData(50, 50, true, 0x99AA3366); 
var diffBmpData:BitmapData = BitmapData(bmd1.compare(bmd2)); 
var diffValue:String = diffBmpData.getPixel32(1, 1).toString(16); 
//解释:当二个位置尺寸大小相同,但RGB分量不同时,compare的值为 FFxxyyzz,其中xx,yy,zz分别为bm1与bm2的RGB分量差,同时alpha分量差将被忽略 
trace (diffValue); // ff56cc33

var bm1:Bitmap = new Bitmap(bmd1); 
addChild(bm1);
bm1.x = bm1.y = 5;
var bm2:Bitmap = new Bitmap(bmd2); 
addChild(bm2);
bm2.x = 60;
bm2.y = 5;

var bmDiff = new Bitmap(diffBmpData);
addChild(bmDiff); 
bmDiff.x = 115;
bmDiff.y = 5;

5.拷贝颜色通道

var bmd:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x00FF0000);

var rect:Rectangle = new Rectangle(0, 0, 20, 40); 
var pt:Point = new Point(10, 10); 
bmd.copyChannel(bmd, rect, pt, BitmapDataChannel.RED, BitmapDataChannel.BLUE);//将红色通道复制到以(10,10)为顶点,宽为20,高为40的矩形区域的蓝色通道中

trace(bmd.getPixel32(10,10).toString(16));//ffff00ff,即矩形区域的最终颜色值为ff ff 00 ff(纯红 叠加 纯蓝)

var bm:Bitmap = new Bitmap(bmd);
this.addChild(bm);

6.截取位图的某一部分(像素)

var bmd1:BitmapData = new BitmapData(40, 40, false, 0x000000FF); 
var bmd2:BitmapData = new BitmapData(80, 40, false, 0x0000CC44);

var rect:Rectangle = new Rectangle(0, 0, 20, 20); 
var pt:Point = new Point(10, 10); 
bmd2.copyPixels(bmd1, rect, pt);//将bmd1中以pt为左上顶点的rect矩形像素复制到bmd2中

var bm1:Bitmap = new Bitmap(bmd1);
this.addChild(bm1); 
var bm2:Bitmap = new Bitmap(bmd2);
this.addChild(bm2);
bm2.x = 50;

7.将文本转换为位图

import flash.display.Bitmap; 
import flash.display.BitmapData;
import flash.text.TextField;

var tf:TextField = new TextField();
tf.text = "bitmap text";

var myBitmapData:BitmapData = new BitmapData(80, 20); 
myBitmapData.draw(tf);
var bmp:Bitmap = new Bitmap(myBitmapData); 
this.addChild(bmp);
bmp.x = stage.stageWidth/2 - bmp.width/2; 
bmp.y = stage.stageHeight/2 - bmp.height/2;

8.仿PS中的颜色填充工具

//准备一个40*40绿色背景的BitmapData 
var myBitmapData:BitmapData = new BitmapData(40, 40, false, 0x0000FF00);

//画二个有“交叉重叠”部分的“蓝色”矩形 
var rect:Rectangle = new Rectangle(0, 0, 25, 25); 
myBitmapData.fillRect(rect, 0x000000FF); 
rect = new Rectangle(20, 20, 20, 20); 
myBitmapData.fillRect(rect, 0x000000FF);

//从坐标(10,10)开始寻找与(10,10)坐标(像素点相同且连续的区域)填充红色 
myBitmapData.floodFill(10, 10, 0x00FF0000);

var bm:Bitmap = new Bitmap(myBitmapData);
addChild(bm);

bm.scaleX = bm.scaleY = 3.0;
bm.x = stage.stageWidth/2 - bm.width/2; 
bm.y = stage.stageHeight/2 - bm.height/2;

9.颜色融合

import flash.display.Bitmap; 
import flash.display.BitmapData;
import flash.geom.Rectangle; 
import flash.geom.Point;

var bmd1:BitmapData = new BitmapData(100, 80, true, 0xFF00FF00); 
var bmd2:BitmapData = new BitmapData(100, 80, true, 0xFFFF0000); 
var rect:Rectangle = new Rectangle(0, 0, 40, 40); 
var pt:Point = new Point(20, 20); 
var mult:uint = 0x80; // 50% ,各通道值均为128,即50% 
bmd1.merge(bmd2, rect, pt, mult, mult, mult, mult);

var bm1:Bitmap = new Bitmap(bmd1);
addChild(bm1); 
var bm2:Bitmap = new Bitmap(bmd2);
addChild(bm2);
bm2.x = 110;

//最终值 
//new redDest = [(redSrc * redMultiplier) + (redDest * (256 - redMultiplier))] / 256; 
trace(bmd1.getPixel32(20,20).toString(16)); //ff7f7f00

//解释: 
//返回值中Red分量为 7f = 0x00 * 0x80 + 0xff*(0x100-0x80)/0x100

10.噪点图

var bmd1:BitmapData = new BitmapData(80, 80); 
var bmd2:BitmapData = new BitmapData(80, 80);

var seed:int = int(Math.random() * int.MAX_VALUE); 
bmd1.noise(seed, 0, 0xFF, BitmapDataChannel.RED, false); 
bmd2.noise(seed, 0, 0xFF, BitmapDataChannel.RED, true);

var bm1:Bitmap = new Bitmap(bmd1);
this.addChild(bm1);
bm1.x = 10; 
bm1.y = 10;
var bm2:Bitmap = new Bitmap(bmd2);
this.addChild(bm2); 
bm2.x = 100;
bm2.y = 10;

stage.addEventListener(Event.ENTER_FRAME,enterFrameHandler);

function enterFrameHandler(e:Event):void{ 
seed = Math.floor(Math.random() * int.MAX_VALUE); 
bmd1.noise(seed, 0, 0xFF, BitmapDataChannel.RED, false); 
bmd2.noise(seed, 0, 0xFF, BitmapDataChannel.RED, true); 
bm1.bitmapData = bmd1;
bm2.bitmapData = bmd2;
}

11.另一种噪点图(有点类似卫星云图)

import flash.display.Bitmap; 
import flash.display.BitmapData;

var bmd:BitmapData = new BitmapData(200, 200, false, 0x00CCCCCC);

var seed:Number = Math.floor(Math.random() * 999999); 
var channels:uint = BitmapDataChannel.GREEN | BitmapDataChannel.BLUE; 
bmd.perlinNoise(100, 80, 6, seed, false, true, channels, false, null);

var bm:Bitmap = new Bitmap(bmd);
addChild(bm); 
bm.x = stage.stageWidth/2 - bm.width/2; 
bm.y = stage.stageHeight/2 - bm.height/2;

stage.addEventListener(Event.ENTER_FRAME,enterFrameHandler);

function enterFrameHandler(e:Event):void{ 
seed = Math.floor(Math.random() * 999999); 
bmd.perlinNoise(100, 80, 6, seed, false, true, channels, false, null); 
bm.bitmapData = bmd; 
}

12.像素融解

import flash.display.BitmapData; 
import flash.display.Bitmap;
import flash.geom.Point; 
import flash.geom.Rectangle;
import flash.utils.Timer; 
import flash.events.TimerEvent;

var rndColor:int = Math.random() * 0xffffffff;//随机背景色 
var fillColor:int = Math.random() * 0xffffffff;//随机填充色

var bmd:BitmapData = new BitmapData(100, 100, false, rndColor); 
var bitmap:Bitmap = new Bitmap(bmd);
addChild(bitmap);

bitmap.scaleX = bitmap.scaleY = 1.5; 
bitmap.x = stage.stageWidth/2 - bitmap.width/2; 
bitmap.y = stage.stageHeight/2 - bitmap.height/2;

var tim:Timer = new Timer(20);
tim.start(); 
tim.addEventListener(TimerEvent.TIMER, timerHandler);

function timerHandler(event:TimerEvent):void { 
var randomNum:Number = Math.floor(Math.random() * int.MAX_VALUE); 
dissolve(randomNum);
}

function dissolve(randomNum:Number):void { 
var rect:Rectangle = bmd.rect;
var pt:Point = new Point(0, 0); 
var numberOfPixels:uint = 100;//每次融解100个像素 
bmd.pixelDissolve(bmd, rect, pt, randomNum, numberOfPixels, fillColor); 
var grayRegion:Rectangle = bmd.getColorBoundsRect(0xFFFFFFFF, rndColor, true);

if(grayRegion.width == 0 && grayRegion.height == 0 ) { 
bmd.dispose();
rndColor = Math.random() * 0xffffffff; 
fillColor = Math.random() * 0xffffff; 
bmd = new BitmapData(100, 100, false, rndColor); 
bitmap.bitmapData = bmd;

//tim.stop();
}
}

13.查找满足条件的颜色并替换

import flash.display.BitmapData; 
import flash.display.Bitmap;
import flash.geom.Point; 
import flash.geom.Rectangle;
import flash.utils.Timer; 
import flash.events.TimerEvent;

var rndColor:int = Math.random() * 0xffffffff;//随机背景色 
var fillColor:int = Math.random() * 0xffffffff;//随机填充色

var bmd:BitmapData = new BitmapData(100, 100, false, rndColor); 
var bitmap:Bitmap = new Bitmap(bmd);
addChild(bitmap);

bitmap.scaleX = bitmap.scaleY = 1.5; 
bitmap.x = stage.stageWidth/2 - bitmap.width/2; 
bitmap.y = stage.stageHeight/2 - bitmap.height/2;

var tim:Timer = new Timer(20);
tim.start(); 
tim.addEventListener(TimerEvent.TIMER, timerHandler);

function timerHandler(event:TimerEvent):void { 
var randomNum:Number = Math.floor(Math.random() * int.MAX_VALUE); 
dissolve(randomNum);
}

function dissolve(randomNum:Number):void { 
var rect:Rectangle = bmd.rect;
var pt:Point = new Point(0, 0); 
var numberOfPixels:uint = 100;//每次融解100个像素 
bmd.pixelDissolve(bmd, rect, pt, randomNum, numberOfPixels, fillColor); 
var grayRegion:Rectangle = bmd.getColorBoundsRect(0xFFFFFFFF, rndColor, true);

if(grayRegion.width == 0 && grayRegion.height == 0 ) { 
bmd.dispose();
rndColor = Math.random() * 0xffffffff; 
fillColor = Math.random() * 0xffffff; 
bmd = new BitmapData(100, 100, false, rndColor); 
bitmap.bitmapData = bmd;

//tim.stop();
}
}

14.综合应用1:模仿MetaBall(当然这种方法并不精确)

var ballNum:uint=5; 
var balls:Array = new Array();
var sW:Number=stage.stageWidth; 
var sH:Number=stage.stageHeight;
var container:Sprite = new Sprite(); 
var bmd:BitmapData=new BitmapData(sW,sH,false,0x00000000); 
var bitmap:Bitmap;
var i:uint=0; 
var rect:Rectangle=new Rectangle(0,0,sW,sH);
var pt:Point=new Point(0,0); 
var filter:BlurFilter=new BlurFilter(15,15);

function init() { 
for (i=0; i<ballNum; i++) { 
var b:Ball=new Ball(30+Math.random()*40,0xffffff);
balls.push(b); 
b.x = (sW - b.width)*Math.random() + b.radius; 
b.y = (sH - b.width)*Math.random() + b.radius; 
b.vx=(Math.random()*2-1)*2;
b.vy=(Math.random()*2-1)*2; 
container.addChild(b);
}

bmd.draw(container); 
bmd.applyFilter(bmd, rect, pt, filter);
bitmap=new Bitmap(bmd); 
addChild(bitmap); 
addEventListener(Event.ENTER_FRAME,enterFrameHandler);
}

function enterFrameHandler(e:Event):void { 
for (i=0; i<ballNum; i++) {
var b:Ball=balls[i];
b.x+=b.vx; 
b.y+=b.vy;
var adjust:uint=5;
if (b.x>=sW-b.radius-adjust) { 
b.x=sW-b.radius-adjust;
b.vx*=-1; 
} else if (b.x<b.radius+adjust) {
b.x=b.radius+adjust; 
b.vx*=-1;
}

if (b.y>=sH-b.radius-adjust) { 
b.y=sH-b.radius-adjust;
b.vy*=-1; 
} else if (b.y<b.radius+adjust) {
b.y=b.radius+adjust; 
b.vy*=-1;
}
}

bmd.dispose(); 
bmd=new BitmapData(sW,sH,false,0x00000000);
bmd.draw(container); 
bmd.applyFilter(bmd, rect, pt, filter);
bitmap.bitmapData=bmd;
}

init();

[2011-3-9 12:59 ]As3.0中的位图(Bitmap/BitmapData)用法的更多相关文章

  1. As3.0中的位图(Bitmap/BitmapData)编程

    https://blog.csdn.net/wtuetnsrmh/article/details/12577929

  2. as3.0中如何阻止事件冒泡

    原作者:菩提树下的杨过转载出处:http://yjmyzz.cnblogs.com 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究 ...

  3. [ActionScript 3.0] AS3中的位图(BitmapData)应用

    1.位图使用(模糊)滤镜 //创建一个矩形区域的BitmapData var bmd:BitmapData = new BitmapData(80, 30, false, 0xffffff); //画 ...

  4. Java&&As3.0 中的final 关键字

    Java和AS3.0关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率.   可以修饰的对象:   fin ...

  5. AS3.0中用于网络通信的类总结

      0条评论  1.Loader Loader 类可用于加载 SWF 文件或图像(JPG.PNG 或 GIF)文件.也只能是这些对象. 网络协议基础:HTTP/RTMP 加载方法原型:Loader.l ...

  6. 【转】Flash AS3.0 中的自定义事件

    原文 http://www.cnblogs.com/acpp/archive/2010/10/19/1855670.html package { import flash.events.Event; ...

  7. vue2.0与3.0中的provide和inject 用法

    1.provide/inject有什么用? 常用的父子组件通信方式都是父组件绑定要传递给子组件的数据,子组件通过props属性接收,一旦组件层级变多时,采用这种方式一级一级传递值非常麻烦,而且代码可读 ...

  8. AS3.0定义变量的访问范围

    在AS3.0中变量的默认访问范围是:internal:包内成员可以访问,包外不可访问.AS2.0默认访问范围是public

  9. AS3.0函数定义的方法

    在AS3.0中函数的定义有两种方法: 函数语句定义法: function 函数名(参数1:参数类型,参数2:参数类型):返回值类型{ 函数折行的语句 } function testAdd(a:int, ...

随机推荐

  1. 应用开发之WinForm环境

    本章简言 上一章笔者讲到关于IO文件操作类,了解如何处理文件流.从这一章开始笔者将讲解相对比较高级的知识点.而本章笔者就对WinForm开发的知识点进行讲解和引导.现在很多业务都是面向于B/S模式的开 ...

  2. kotlin正式由Goole公布为Android的最新开发语言

    那么,现在大家开发Android的话一般来说都是直接用Java,这个没错吧(高手除外).嗯,那么用力那么久的Java,不知道大家是否有想过Java的不足,已经很多可以优化的地方呢.当然,新修订的版本中 ...

  3. JSP内置对象——response

    response对象response对象包含了响应客户端的有关信息,但在JSP中很少使用它.它是HttpServletResponse类的实例.response对象具有页面作用域,即访问一个页面时,该 ...

  4. eclipse中的SVN文件还原到历史版本

    转载自:http://www.softown.cn/post/103.html 由于某些特殊原因,我们可能需要将SVN资源库中的某个文件回滚到以前的某个历史版本(准确地说,这不是"回滚&qu ...

  5. Vue基础-渲染函数-父子组件-传递数据

    Vue 测试版本:Vue.js v2.5.13 做了个 demo,把父子组件的数据都绑定到 Vue 实例 app 上,注释中的 template 相对好理解些 <div id="app ...

  6. 170316、spring4:@Cacheable和@CacheEvict实现缓存及集成redis

    注:1.放入cache中,采用@Cacheable;使缓存失效@CacheEvict 2.自定义CacheManager只需要继承org.springframework.cache.support.A ...

  7. JSP中的内置对象和Struts中的Web资源的详解

    JSP中的内置对象有如下几种: request :继承于HttpServletRequest, HttpServletRequest继承ServletRequest, 获得的Request对象的方法: ...

  8. iass,pass,cass,sass,vm,container

    分布式存储hdfs 大文件,swift 对象存贮. 为七牛的CDN系统目前大部分还不是自建的,采用的是整合其它CDN的方式做的.也就是说出了七牛的文件分发使用的是网宿和蓝汛的老牌CDN的分发节点,自身 ...

  9. 剑指Offer——把二叉树打印成多行

    题目描述: 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 分析: 二叉树的层次遍历,利用队列. 代码: /* struct TreeNode { int val; struct T ...

  10. Storm编程模型及组件流程图

    一.Storm编程模型 二.Storm组件流程图