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)); // ff000000var 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区域应用colorTransformvar 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); // 33ffffffvar 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); // ff56cc33var 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;
}

转载于:https://www.cnblogs.com/frost-yen/p/4878036.html

[ActionScript 3.0] AS3中的位图(BitmapData)应用相关推荐

  1. ActionScript 3.0 API 中的 Video 类

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

  2. [ActionScript 3.0] AS3.0 简单封装Socket的通信

    Socket服务器 package com.controls.socket {import com.models.events.AppEvent;import com.models.events.Ap ...

  3. [ActionScript 3.0] AS3 绘制正八面体(线条)

    分析: 将八面体置于3D坐标系中,其中心的坐标位于原点(0,0,0),让八面体的六个顶点恰好位于3D坐标系的x轴.y轴和z轴上,则从八面体的中心到这六个顶点的距离是相等的.我们可以假设这个距离为r,则 ...

  4. [ActionScript 3.0] AS3.0 下雨及涟漪效果

    帧代码: stage.frameRate = 80;function init(x1:Number,y1:Number) {var mc:MovieClip=new MovieClip();addCh ...

  5. [ActionScript 3.0] AS3.0 对象在一定范围随机显示不重叠

    import flash.geom.Rectangle; import flash.display.MovieClip; import flash.display.Sprite;var arr:Arr ...

  6. [ActionScript 3.0] AS3.0 调试出现安全沙箱冲突错误解决办法

    提示 *** 安全沙箱冲突 *** 到 http://api.map.baidu.com/telematics/v3/weather?location=%E6%88%90%E9%83%BD&o ...

  7. ActionScript 3.0权威指南

    ActionScript 3.0权威指南 作者:  乔珂  译者: 无  定 价:  89.00元(含光盘1张)  页码:  840  出版时间:  2008-07  ISBN号:  97871210 ...

  8. Flash Actionscript 2.0中的函数与事件 之 函数类(Function Class)

    Flash Actionscript 2.0中的函数与事件  之  函数类(Function Class) 作者:LeeFJ 函数是什么,在面向对象里面通常称为方法(Method),但是在AS2.0里 ...

  9. 《ActionScript 3.0权威指南》阅读笔记

    第二章  配置开发环境 目前,主流的ActionScript 3.0开发环境分为Flash和Flex两大类.前者是设计和开发一体的集成环境,后者是严肃的脚本开发平台,更符合程序猿的析构.开发者应根据自 ...

最新文章

  1. 究竟该不该“勃”!!!
  2. 架构师眼中的高并发架构
  3. TensorFlow 教程——基本分类:对服装图像进行分类
  4. 【渝粤教育】广东开放大学 系统工程 形成性考核 (25)
  5. html自定义列表 嵌套,HTML 列表
  6. php accept-length,php中Accept-Length获取不到下载文件的大小
  7. django 集成个推_Django动态添加定时任务之djangocelery的使用
  8. 游戏动词和宾语设计案例精选
  9. 《关于促进大数据发展的行动纲要》提出三大指导意见
  10. java面试的职业规划怎么说_java面试技巧-职业规划有技巧
  11. 用matlab实现傅里叶变换,matlab实现傅里叶变换
  12. vue-element-admin 菜单栏 三级目录生成无法展示问题
  13. [blender]图片模糊不清楚怎么变清晰
  14. 关于车臣战争有什么电影?车臣战争片推荐
  15. 网络中的IP地址(包括私网地址)
  16. 【计算机组成原理】冯诺伊曼结构和计算机性能指标
  17. 中医证型关联规则挖掘Python代码【完整】
  18. stc12c5a60s DHT11温湿度传感器
  19. 从实现原理谈谈低代码
  20. ios自制电话本-swift

热门文章

  1. 只用我的提取程序取了800多条产品信息
  2. Flutter Listener 监听手指的滑动方向、监听手指上下滑动
  3. Flutter中Widget 、Element、RenderObject角色深入分析
  4. java中的多线程来看一看基础了
  5. linux系统添加环境变量
  6. 吴恩达《深度学习》第四门课(4)特殊应用:人脸识别和神经风格迁移
  7. H264 帧边界识别简介
  8. 20140704笔试面试总结(java)
  9. CentOS6.5 安装ORACLE 安装界面乱码解决方案
  10. 《Java 7 并发编程指南》学习概要 (3)Semaphore, CountDownLatch, CyclicBarrier , Phaser, Exchanger...