BitMapData知识 转

Bitmap和BitmapData

2010.5.25 smartblack整理

一、flash.display.Bitmap类及其两个子类

1、继承自DisplayObject,和InteractiveObject平级,所以无法调度鼠标事件,可以使用额外的包装容器(Sprite)来实现侦听。

2、只支持GIF、JPEG、PNG格式,不支持BMP(网上已有解决方法)

3、构造函数: Bitmap(bitmapData:BitmapData = null, pixelSnapping:String = "auto", smoothing:Boolean = false),pixelSnapping是自动紧贴,smoothing是平滑处理

4、Bitmap类的子类mx.core.FlexBitmap:覆盖了toString(),用于指示对象在应用程序的DisplayObject层次结构中所处的位置。

5、FlexBitmap的子类mx.core.BitmapAsset:实现了IFlexAsset、IFlexDisplayObject接口。在FLEX应用程序中,通常不必直接使用此类,MXML编译器会自动生成,比如:

<mx:Image id = “logo” source = “@Embed(source = ‘Logo.gif’)”/>

不过,在AS级别,则可以对图片进行更多的操作(比如使用BitmapData类的一些方法):

[Bindable]

[Embed(source = “Logo.gif”)]

private var logoClass:Class;

var logo:BitmapAsset = BitmapAsset(new logoClass());

logo.bitmapData.noise(4);

<mx:Image id = “logo” source = “{logoClass}”/>

 

二、flash.display.BitmapData类及常用类方法简介

1、继承自Object,可以看作一个专门用来存储位图像素点阵信息的数组。比如大小100x100的位图,其BitmapData就相当于一个100x100的二维数组,对应存储了10000像素的颜色值。这个颜色值是一个32位的ARGB值,用uint整数类型表示,即alpha 和red green blue 三原色。0xFF669900代表不透明的橙色,其中FF表示16进制的最大数,alpha值的范围也就在0x00-0xFF之间,比如十六进制80就是十进制的128,也就是透明度256的一半。

2、构造函数:BitmapData(width:int, height:int, transparent:Boolean = true,fillColor:unit = 0xFFFFFFFF),width 和 height 参数指定位图的大小,二者的最大值都是 2880 像素。transparent是透明度,设置为false时,颜色值仅使用24位的RGB值,这可以略微提升呈现性能。但需要注意的是,设置为不透明位图后,将无法再更改为透明位图。fillColor是用于填充位图区域的 32 位 ARGB 颜色值,默认为0xFFFFFFFF(纯白色)。

3、像素处理(参考http://www.skill8.net/article.asp?id=15)

处理单个像素: 获取要处理的区域中包含的像素的颜色值。使用 getPixel() 方法可读取这些单个的像素值。 getPixel() 方法从作为参数传递的一组 x, y(像素)坐标中检索 RGB 值。 getPixel32() 返回的值包含表示所选像素的 Alpha 通道(透明度)值的附加数据。 同理设置单个像素: 如果只想更改位图中包含的某个像素的颜色或透明度,则可以使用 setPixel() 或 setPixel32() 方法。若要设置像素的颜色,只需将 x, y 坐标和颜色值传递到这两种方法之一即可。 
设置某个区域请使用 getPixels() 方法。此方法从作为参数传递的矩形像素数据区域中生成字节数组。字节数组的每个元素(即像素值)都是无符号的整数(32 位未经相乘的像素值)。 相反,为了更改(或设置)一组像素值,请使用 setPixels() 方法。此方法需要联合使用两个参数(rect 和 inputByteArray)来输出像素数据 (inputByteArray) 的矩形区域 (rect)。 从 inputByteArray 中读取(或写入)数据时,会为数组中的每个像素调用 ByteArray.readUnsignedInt() 方法。如果由于某些原因,inputByteArray 未包含像素数据的整个矩形,则该方法会停止处理该点处的图像数据。 必须记住的是,对于获取和设置像素数据,字节数组需要有 32 位 Alpha、红、绿、蓝 (ARGB) 像素值。 

4、像素级别冲突检测

这个有什么用?我有一个对象需要判断是否和PNG图片碰撞,但是PNG图片的边缘是透明的时候,这个就有用了。

BitmapData.hitTest() 方法可以在位图数据和另一个对象或点之间执行像素级别冲突检测。

 

hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean

 

firstPoint (Point):此参数指在其上执行点击测试的第一个 BitmapData 的左上角的像素位置。

firstAlphaThreshold (uint):此参数指定对于此点击测试视为不透明的最高 Alpha 通道值。

secondObject (Object):此参数表示影响区域。secondObject 对象可以是 Rectangle、Point、Bitmap 或 BitmapData 对象。此对象表示在其上执行冲突检测的点击区域。

secondBitmapDataPoint (Point):此可选参数用于在第二个 BitmapData 对象中定义像素位置。只有当 secondObject 的值为 BitmapData 对象时,才使用此参数。默认值为 null。

secondAlphaThreshold (uint):此可选参数表示在第二个 BitmapData 对象中视为不透明的最高 Alpha 通道值。默认值为 1。只有当 secondObject 是一个 BitmapData 对象且两个 BitmapData 对象都透明时,才使用此参数。

5、applyFilter添加滤镜、fillRect使用指定颜色填充一个矩形像素区域

http://hi.baidu.com/%B0%B5%BA%DA%B2%E0%CE%C0/blog/item/cb78f89bae3558bcc9eaf401.html

6、draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void

将source对象绘制到BitmapData对象里。其中,DisplayObject和BitmapData类实现了IBitmapDrawable接口。clipRect是对源对象的裁剪,不指定则会绘制整个源对象。另外,注意跨域的问题。

应用:保存图片,保存当前屏幕显示内容等。参考http://wangcheng.iteye.com/blog/129007

 

7、getColorBoundsRect(mask:uint, color:uint, findColor:Boolean = true):Rectangle

mask:uint一个十六进制值,指定要考虑的 ARGB 颜色的位。通过使用 &(按位 AND)运算符,将颜色值与此十六进制值合并。

color:uint一个十六进制值,指定要匹配(如果 findColor 设置为 true)或不 匹配(如果 findColor 设置为 false)的 ARGB 颜色。

findColor:Boolean (default = true)如果该值设置为 true,则返回图像中颜色值的范围。如果该值设置为 false,则返回图像中不存在此颜色的范围。

应用:获得一个DisplayObject的真实宽高(去除透明部分)

function getRealWH(source:DisplayObject):Rectangle{

copy = new BitmapData(source.width,source.height,false,0xFF0000);

copy.draw(source);

return copy.getColorBoundsRect(0xFFFFFF,0xFF0000,false);

}

具体思路就是,将BitmapData背景设为红色,将source对象draw上去,然后获取非红色部分的边框。

8、同一个BitmapData对象可能被多个Bitmap对象持有,那么一旦BitmapData改变,所有的Bitmap对象都将受到影响,为了避免这种情况,可以用BitmapData对象提供的clone()方法生成当前BitmapData对象的拷贝。

 

三、Bitmap和BitmapData的综合描述

1、将Bitmap位图对象和BitmapData位图信息分开,是为了让位图呈现操作与Flash Player的内部显示更新例程分隔开来,不会因为连续的绘制导致额外的每帧开销。

2、当应用程序需要将位图图像保存到本地或发送到服务端时, 通常的方法是在发送数据前将图像通过PNG或JPEG编码。如果只是想保存位图图像,只要序列化BitmapData即可,将图像转换为 JPEG/PNG是完全没有必要的。参见[AS3]Bitmap序列化(将BitmapData保存为原生Binary/ByteArray)

地址:http://space.flash8.net/space/?388361/viewspace-468245.html

 

四、附记

1、位图与矢量图的概念及区别 

矢量图(vector):矢量图形是以数学方式生成的几何形状,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。众所周知Flash就是一款矢量动画制作软件。在AS中使用的填充(beginFill),画线(lineTo)等命令都是基于对矢量图的操作。

位图(Bitmap):位图图形也称为光栅图形,由排列为矩形网格形式的小方块(像素)组成。简单地说,位图就是以无数的色彩点组成的图案。 两者比较:

矢量图可以无限放大,而且不会失真; 而位图会失真。

位图由像素组成而矢量图由矢量线组成。

位图可以表现的色彩比较多;而矢量图则相对较少。

矢量图体积小,但比较消耗计算资源;位图则比较消耗内存资源,但对计算资源消耗小。

 

位图图像用图像的宽度和高度来定义,以像素为量度单位,每个像素包含的位数表示像素包含的颜色数。在使用 RGB 颜色模型的位图图像中,像素由三个字节组成:红、绿和蓝。每个字节包含一个 0 至 255 之间的值。将字节与像素合并时,它们可以产生与艺术混合绘画颜色相似的颜色。例如,一个包含红色字节值 255、绿色字节值 102 和蓝色字节值 0 的像素可以形成明快的橙色。

位图图像的品质由图像分辨率和颜色深度位值共同确定。分辨率与图像中包含的像素数有关。像素数越大,分辨率越高,图像也就越精确。颜色深度又叫色彩位数,与像素可包含的信息量有关。即位图中要用多少个二进制位来表示每个点的颜色,是分辨率的一个重要指标。常用有1位(单色),2位(4色,CGA),4位(16色,VGA),8位(256色),16位(增强色),24位和32位(真彩色)等。色深16位以上的位图还可以根据其中分别表示RGB三原色或CMYK四原色(有的还包括Alpha通道,CMYK四原色指打印颜色)的位数进一步分类 例如,颜色深度值为每像素 16 位的图像无法显示颜色深度为 48 位的图像所具有颜色数。因此,48 位图像与 16 位图像相比,其阴影具有更高的平滑度。

由于位图图形跟分辨率有关,因此不能很好地进行缩放。当放大位图图像时,这一特性显得尤为突出。通常,放大位图有损其细节和品质。

2、三种图形格式说明

Adobe Flash Player 支持GIF、JPG 和 PNG三种位图图像格式 。对于使用GIF和 PNG的位图图像还可以对每个像素添加一个额外的字节——Alpha通道,表示像素的透明度值。

GIF

图形交换格式 (GIF) 最初由 CompuServe 于 1987 年开发,作为一种传送 256 色(8 位颜色)图像的方式。此格式提供较小的文件大小,是基于 Web 的图像的理想格式。受此格式的调色板所限,GIF 图像通常不适用于照片,照片通常需要高度的阴影和颜色渐变。GIF 图像允许产生一位透明度,允许将颜色映射为清晰(或透明)。这可以使网页的背景颜色通过已映射透明度的图像显示出来。

JPEG

由联合图像专家组 (JPEG) 开发,JPEG(通常写成 JPG)图像格式使用有损压缩算法允许24 位颜色深度具有很小的文件大小。有损压缩意味着每次保存图像,都会损失图像品质和数据,但会生成更小的文件大小。由于 JPEG 能够显示数百万计的颜色,因此它是照片的理想格式。控制应用于图像的压缩程度的功能使您能够控制图像品质和文件大小。

PNG

可移植网络图形 (PNG) 格式是作为受专利保护的 GIF 文件格式的开放源替代格式而开发的。PNG 最多支持 64 位颜色深度,允许使用最多 1600 万种颜色。由于 PNG 是一种比较新的格式,因此一些旧版本浏览器不支持 PNG 文件。与 JPG 不同, PNG 使用无损压缩,这意味着保存图像时不会丢失图像数据。PNG 文件还支持 Alpha 透明度,允许使用最多 256 级透明度。

 

五、参考链接

1、http://hi.baidu.com/voidwizard/blog/item/0d8f23c295c79b5eb219a8da.html

2、[转载]Flash火焰效果讲解-BitmapData应用

地址:http://www.klstudio.com/post/194.html

3、BitmapData的整理http://uh.9ria.com/space-29516-do-blog-id-6898.html

转载于:https://www.cnblogs.com/regalys168/p/3715419.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android学习之高德地图的通用功能开发步骤(二)

周一又来了&#xff0c;我就接着上次的开发步骤&#xff08;一&#xff09;来吧&#xff0c;继续把高德地图的相关简单功能分享一下 上次写到了第六步&#xff0c;接着写第七步吧。 第七步&#xff1a;定位 地图选点 路径规划 实时导航 以下是我的这个功能NaviMapActivity的…

Oracle中分区表中表空间属性

Oracle中的分区表是Oracle中的一个很好的特性&#xff0c;可以把大表划分成多个小表&#xff0c;从而提高对于该大表的SQL执行效率&#xff0c;而各个分区对应用又是透明的。分区表中的每个分区有独立的存储特性&#xff0c;包括表空间、PCT_FREE等。那分区表中的各分区表空间之…

期刊论文格式模板 电子版_期刊论文的框架结构

最近看到很火的一句话&#xff0c;若不是生活所迫&#xff0c;谁愿意把自己弄得一身才华。是否像极了正想埋头苦写却毫无头绪的你&#xff1f;发表期刊论文的用途 &#xff1a;1: 学校或者单位评奖&#xff0c;评优&#xff0c;推免等2&#xff1a;申领学位证(如毕业硬性要求&a…

faster rcnn学习之rpn 的生成

接着上一节《 faster rcnn学习之rpn训练全过程》&#xff0c;假定我们已经训好了rpn网络&#xff0c;下面我们看看如何利用训练好的rpn网络生成proposal. 其网络为rpn_test.pt # Enter your network definition here. # Use ShiftEnter to update the visualization. name: &q…

初学java之常用组件

1 2 import javax.swing.*;3 4 import java.awt.*;5 class Win extends JFrame6 {7 JTextField mytext; // 设置一个文本区8 JButton mybutton;9 JCheckBox mycheckBox[]; 10 JRadioButton myradio[]; 11 ButtonGroup group; //为一…

anaconda 安装在c盘_最省心的Python版本和第三方库管理——初探Anaconda

打算把公众号和知乎专栏的文章搬运一点过来。 历史文章可以去关注我的公众号&#xff1a;不二小段&#xff0c;或者知乎&#xff1a;段小草。也欢迎来看我的视频学Python↓↓↓跟不二学Python这篇文章可以作为Python入门的第一站可以结合这期视频来看&#xff0c;基本上是这期视…

Iris recognition papers in the top journals in 2017

转载自&#xff1a;https://kiennguyenstuff.wordpress.com/2017/10/05/iris-recognition-papers-in-the-top-journals-in-2017/ Top journals: – IEEE Transaction on Pattern Analysis and Machine Intelligence (PAMI) – Pattern Recognition (PR) – IEEE Transaction on…

判断浏览器是否为IE内核的最简单的方法

没啥说的&#xff0c;直接贴代码&#xff0c;算是ie hack了。 if (![1,]) {alert(is ie); } 转载于:https://www.cnblogs.com/jasondan/p/3716660.html

dubbo控制中心部署,权重配置,以及管控台中各个配置的简单查看

dubbo给我们提供了现成的后台管理网站&#xff0c;专门管理这些服务&#xff0c;应用&#xff0c;路由规则&#xff0c;动态配置&#xff0c;访问控制、权重控制、负载均衡等等&#xff0c;还可以查看系统日志&#xff0c;系统状态&#xff0c;系统环境等等&#xff0c;功能很是…

给git配置http代理

1. 安装socat apt-get install socat 2. 创建配置文件&#xff0c;取名gitproxy填入以下内容&#xff1a; #!/bin/sh_proxy135.245.48.33_proxyport8000 exec socat STDIO PROXY:$_proxy:$1:$2,proxyport$_proxyport 加上可执行权限chmod x gitproxy&#xff0c;将此文件放在环…

faster rcnn在自己的数据集上训练

本文是一个总结&#xff0c;参考了网上的众多资料&#xff0c;汇集而成&#xff0c;以供自己后续参考。 一般说来&#xff0c;训练自己的数据&#xff0c;有两种方法&#xff1a;第一种就是将自己的数据集完全改造成VOC2007的形式&#xff0c;然后放到py-faster-rcnn/data 目录…

1001种玩法 | 1001种玩法--数据存储(2)

新智云www.enncloud.cn第二趴 Flockdb&#xff1a;一个高容错的分布式图形数据库 FlockDB是一个存储图数据的分布式数据库&#xff0c;图数据库的存储对象是数学概念图论里面的图&#xff0c;而非图片。Twitter使用它来存储人与人之间的关系图&#xff0c;这些关系包括&#xf…

python逻辑量有什么_Python中的逻辑运算符有什么?

逻辑运算符用于组合多个条件测试语句。假设“我今年18岁”和“我身高2米”这两个语句&#xff0c;前一个语句是真的&#xff0c;后一个语句是假的&#xff0c;因此&#xff0c;“我今年18岁&#xff0c;并且我身高2米”这个语句是假的。其中&#xff0c;“并且”可以认为是逻辑…

时区日期处理及定时 (NSDate,NSCalendar,NSTimer,NSTimeZone)

NSDate存储的是世界标准时(UTC)&#xff0c;输出时需要根据时区转换为本地时间 Dates NSDate类提供了创建date&#xff0c;比较date以及计算两个date之间间隔的功能。Date对象是不可改变的。 如果你要创建date对象并表示当前日期&#xff0c;你可以alloc一个NSDate对象并调用in…

Android ListView分页,动态添加数据

1.ListView分页的实现&#xff0c;重点在于实现OnScrollListener接口&#xff0c;判断滑动到最后一项时&#xff0c;是否还有数据可以加载&#xff0c; 我们可以利用listView.addFootView(View v)方法进行提示 自定义一个ListView&#xff08;这里本来想进行一些自定已修改的。…

faster rcnn的测试

当训练结束后&#xff0c;faster rcnn的模型保存在在py-faster-rcnn/output目录下&#xff0c;这时就可以用已有的模型对新的数据进行测试。 下面简要说一下测试流程。 测试的主要代码是./tools/test_net.py&#xff0c;并且使用到了fast_rcnn中test.py。 主要流程就是&…

python重点知识 钻石_python——子类对象如何访问父类的同名方法

1. 为什么只说方法不说属性关于“子类对象如何访问父类的同名属性“是没有意义的。因为父类的属性子类都有&#xff0c;子类还有父类没有的属性&#xff0c;在初始化时&#xff0c;给子类对象具体化所有的给定属性&#xff0c;完全没必要访问父类的属性&#xff0c;因为是一样的…

Android-Universal-Image-Loader 的使用说明

这个图片异步载入并缓存的类已经被非常多开发人员所使用&#xff0c;是最经常使用的几个开源库之中的一个&#xff0c;主流的应用&#xff0c;随便反编译几个火的项目&#xff0c;都能够见到它的身影。但是有的人并不知道怎样去使用这库怎样进行配置&#xff0c;网上查到的信息…

faster rcnn end2end 训练与测试

除了前面讲过的rpn与fast rcnn交替训练外&#xff0c;faster rcnn还提供了一种近乎联合的训练&#xff0c;姑且称为end2end训练。 根据论文所讲&#xff0c;end2end的训练一气呵成&#xff0c;对于前向传播&#xff0c;rpn可以作为预设的网络提供proposal.而在后向传播中&…

jquery ui动态切换主题的一种实现方式

这两天看coreservlets上的jQuery教程&#xff0c;虽然比较老了&#xff0c;不过讲得还是不错。最后一部分讲jQuery ui 主题切换&#xff0c;用他介绍的方法实现不了。于是自己修改了下&#xff0c;可以了。代码如下&#xff1a;html部分&#xff1a;<fieldset class"ui…