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

//创建一个矩形区域的BitmapData
var bmd:BitmapData = new BitmapData(80, 30, false, 0xffffff);
//画个红色的矩形
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 bmp:Bitmap = new Bitmap(bmd);
bmp.scaleX = bmp.scaleY = 2.0;
bmp.x = stage.stageWidth/2 -bmp.width/2;
bmp.y = stage.stageHeight/2 - bmp.height/2 ;
addChild(bmp);

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 bmp1:Bitmap = new Bitmap(bmd1);
this.addChild(bmp1);
bmp1.x =bmp1.y = 5; var bmp2:Bitmap = new Bitmap(bmd2);
bmp2.x = 105;
bmp2.y =5;
this.addChild(bmp2);

3.颜色变换

var bmd:BitmapData = new BitmapData(80, 30, false, 0xFF0000);
var ct:ColorTransform = new ColorTransform();
ct.alphaMultiplier = 0.8;//设置透明度因子为0.8
//ct.color = 0xff00ff;
var rect:Rectangle = new Rectangle(0, 0, 40, 30);//定义左半边矩形区域
bmd.colorTransform(rect, ct);//对rect区域应用colorTransform var bmp:Bitmap = new Bitmap(bmd);
addChild(bmp); bmp.x = stage.stageWidth/2 - bmp.width/2;
bmp.y = stage.stageHeight/2 - bmp.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 bmp1:Bitmap = new Bitmap(bmd1);
addChild(bmp1);
bmp1.x = bmp1.y = 5;
var bmp2:Bitmap = new Bitmap(bmd2);
addChild(bmp2);
bmp2.x = 60;
bmp2.y = 5; var bmpDiff = new Bitmap(diffBmpData);
addChild(bmpDiff);
bmpDiff.x = 115;
bmpDiff.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 bmp1:Bitmap = new Bitmap(bmd1);
addChild(bmp1);
bmp1.x = bmp1.y = 5;
var bmp2:Bitmap = new Bitmap(bmd2);
addChild(bmp2);
bmp2.x = 60;
bmp2.y = 5; var bmpDiff = new Bitmap(diffBmpData);
addChild(bmpDiff);
bmpDiff.x = 115;
bmpDiff.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 bmp:Bitmap = new Bitmap(bmd);
this.addChild(bmp);

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 bmp1:Bitmap = new Bitmap(bmd1);
this.addChild(bmp1);
var bmp2:Bitmap = new Bitmap(bmd2);
this.addChild(bmp2);
bmp2.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 bmpd:BitmapData = new BitmapData(80, 20);
bmpd.draw(tf);
var bmp:Bitmap = new Bitmap(bmpd);
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 bmp:Bitmap = new Bitmap(myBitmapData);
addChild(bmp); bmp.scaleX = bmp.scaleY = 3.0;
bmp.x = stage.stageWidth/2 - bmp.width/2;
bmp.y = stage.stageHeight/2 - bmp.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 bmp1:Bitmap = new Bitmap(bmd1);
addChild(bmp1);
var bmp2:Bitmap = new Bitmap(bmd2);
addChild(bmp2);
bmp2.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 bmp1:Bitmap = new Bitmap(bmd1);
this.addChild(bmp1);
bmp1.x = 10;
bmp1.y = 10;
var bmp2:Bitmap = new Bitmap(bmd2);
this.addChild(bmp2);
bmp2.x = 100;
bmp2.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);
bmp1.bitmapData = bmd1;
bmp2.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 bmp:Bitmap = new Bitmap(bmd);
addChild(bmp);
bmp.x = stage.stageWidth/2 - bmp.width/2;
bmp.y = stage.stageHeight/2 - bmp.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);
bmp.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.Bitmap;
import flash.display.BitmapData;
import flash.display.BitmapDataChannel;
import flash.geom.Point;
import flash.geom.Rectangle; var bmd1:BitmapData = new BitmapData(200, 200, true, 0xFFCCCCCC); var seed:int = int(Math.random() * int.MAX_VALUE);
var channels:uint = BitmapDataChannel.RED | BitmapDataChannel.BLUE;
bmd1.perlinNoise(100, 80, 12, seed, false, true, channels, false, null); var bitmap1:Bitmap = new Bitmap(bmd1);
addChild(bitmap1); var bmd2:BitmapData = new BitmapData(200, 200, true, 0xFFCCCCCC);
var pt:Point = new Point(0, 0);
var rect:Rectangle = new Rectangle(0, 0, 200, 200);
var threshold:uint = 0x00800000;//50%的红色通道值
var color:uint = 0x80FF0000;//替换后的颜色
var maskColor:uint = 0x00FF0000;//因为只查找红色通道,所以遮罩仅为纯红色通道
bmd2.threshold(bmd1, rect, pt, ">", threshold, color, maskColor, true); var bitmap2:Bitmap = new Bitmap(bmd2);
bitmap2.x = bitmap1.x + bitmap1.width + 10;
addChild(bitmap2); //addEventListener(Event.ENTER_FRAME,EnterFrameHandler); function EnterFrameHandler(e:Event):void{
seed = int(Math.random() * int.MAX_VALUE);
bmd1.perlinNoise(100, 80, 12, seed, false, true, channels, false, null);
bitmap1.bitmapData = bmd1;
bmd2.threshold(bmd1, rect, pt, ">", threshold, color, maskColor, true);
bitmap2.bitmapData = bmd2;
}

[ActionScript 3.0] AS3中的位图(BitmapData)应用的更多相关文章

  1. [ActionScript 3.0] AS3中Loader无法彻底卸载

    我测试发现,实例化的Loader无法彻底卸载,同行有没有办法,求赐教! import flash.display.Loader; import flash.net.URLRequest; import ...

  2. [ActionScript 3.0] AS3.0 动态加载显示内容

    可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...

  3. [ActionScript 3.0] as3处理xml的功能和遍历节点

    as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象 ...

  4. [ActionScript 3.0] AS3.0和AS2.0的相互通信

    AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) ...

  5. ActionScript 3.0 API 中的 Video 类

    注:这个类在Flash流媒体开发中使用的很频繁,在此记录一下它的使用方法. 包 flash.media 类 public class Video 继承 Video  DisplayObject  Ev ...

  6. [ActionScript 3.0] AS3动画类Tweener中滤镜的运用

    package { import caurina.transitions.Tweener; import caurina.transitions.properties.FilterShortcuts; ...

  7. [ActionScript 3.0] AS3 深入理解Flash的安全沙箱Security Domains

    简介 如果你还没有与复杂的的安全域(security domain)和应用程序域(application domain)问题打过交道,那么你真是个幸运的家伙.当你在加载外部内容(然后他们开始播放)的时 ...

  8. [ActionScript 3.0] AS3 3D双圆环贴图

    package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieCl ...

  9. [ActionScript 3.0] flash中的颜色

    在 Flash 中,颜色就是一串特殊的数字,一个颜色值可以是0到16,777,215中的任意数值,这就是24位(bit)色彩.也许大家会问,为什么有16,777,216(256*256*256)种颜色 ...

随机推荐

  1. OpenJudge计算概论-循环移动

    /*=============================================================================== 循环移动 总时间限制: 1000ms ...

  2. js键盘事件全面控制

    js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型 ...

  3. SqlServer性能急剧下降,查看所有会话的状态及等待类型---Latch_Ex

    当某个数据库文件空间用尽,做自动增长的时候,同一时间点只能有一个用户人员可以做文件自动增长动作,其他任务必须等待,此时会出现Latch资源的等待.使用sp_helpdb查看业务数据库时发现:该数据库设 ...

  4. 你了解System.out.println()的真正含义吗?

    在Java编程中,我们常常用 System.out.println(); 来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢? 其实System是jav ...

  5. SQL SERVER 拆分列为多行

    --创建测试表 )) insert into #temp(names) values('张三,李四'), ('中国,美国,巴西'), ('深圳,上海,北京,广州,哈尔滨'), ('足球,篮球,乒乓球, ...

  6. ArrayList和LinkedList遍历方式及性能对比分析

    ArrayList和LinkedList的几种循环遍历方式及性能对比分析 主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayLis ...

  7. Oracle备份与恢复之exp/imp

    获取帮助 exp help=y/imp help=y 工作方式 交互式 exp 命令行 exp user/pwd@dbname file=/oracle/test.dmp full=y 参数文件方式 ...

  8. jsonp的简单例子

    jsonp的简单例子 index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...

  9. grep,sed,cut,awk,join个性特点

    grep 从数据文件中查询/提取出含有特定关键字的行. sed 主要用于对数据文件中特定字符串的替换处理. cut 按照指定的分隔符(-d)剪下选定的列(-f num)或者字符(-c)的内容. awk ...

  10. C# 用正则表达式替换字符串中所有特殊字符

    descriptionXML = Regex.Replace(ToDBC(descriptionXML.ToUpper().Replace((char)32, ' ').Replace((char)1 ...