声明:此教程来自Adobe devnethttp://www.adobe.com/devnet/flash/articles/image_api.html
原文作者Guy Watson,网址:http://www.flashguru.co.uk
webstudio对其进行了翻译,并进行了整理,添加了教程中的过程文件,及范例文件.转载请注明出处并标有活动链接。
Macromedia Flash8 Image API 描述了一个的新的actionscirpt class类BitmapData 以及与其相关的各式各样的方法所带来的新的特性。这些新的方法使flash开发人员通过Actionscript在运行时创建并操作32位图像。这些 Image Api非常类似于macromedia的产品Director中的lingo api.然而在flash8 的image api更细致准备,有更强的功能。在这篇文章中,我们将来研究如何开始使用Image Api并讨论它的一些能力。
在Actionscript 中使用Bitmaps
新的BitmapData 类用来描述在内存中的bitmap对象,当你创建一个新的类实例时,一个空的图像就已经保存在内存中了,你可以使用BitmapData类所提供的各种方 法来操作这个原始的bitmap.在你开始应用BitmapData类之前,你需要先了解一个关于bitmaps的前前后后。
Bitmap是一个数字格式图形,它使用色彩数据网格来描述一张图像,在网格中的每一个单元格代表一个像素,每一个像素是都是由指定的 色值渲染成的一个图像。Bitmap在flash player中被保存成32位色彩深度。这意味着每一个被指定了色彩的像素都是以二进制数保存,它的长度为32bit.在32位图像中的一个像素的颜色它 可能只是16.7万色中的一种。每一种颜色又是由四种颜色通道如红,绿,蓝和alpha通道组成。
16进制颜色值
在Actionscript中与BitmapData类相关联的颜色值是以32位的十六进制数形式表示的。一个32位的十六进制数包含了4个十六进制数 对,每一对是两个数。每一对十六进制数定义4色通道(红,绿,蓝,alpha)之中一种通道的强度,每一个颜色通道的强度是一个十六进制数,强度范围是 0-255的十进数,FF代表最强(255),00代到在这个通道中没有颜色(0)。正如你所看的,每一个通道是两个数的长度,例如是01而不能写成1, 这样确保在一个十六进制数中你总是有8个数,同时不要忘记需要加上十六进制数的前缀0x,例如纯白色用十六进制表示为0xFFFFFFFF。黑色正好相 反,在红,绿蓝三个通道中都没有颜色所以我们写成0xFF000000。注意alpha通道,在十六进制数对中,它是第一对,它仍处于最强状 态,alpha通道为FF为最强状态意味着没有alpha,也就是说完全不透明,00意味着完全alpha,也就是说完全透明。所以一个透明像素的颜色值 为0x00FFFFFF。
ARGB转换为十六进制值
在通常情况下大多数人熟知的颜色值是ARGB格式也说每个值都使用的是0-255之前的数值,如果是这样,你需要知道如何将ARGB值转换为十六进制值,下面的代码告诉你如何来转换它们:
演示文件:
如下代码:
function argbtohex(a:Number, r:Number, g:Number, b:Number) { return (a<<24 | r<<16 | g<<8 | b) }
使用方法:
hex=argbtohex(255,0,255,0)
十六进制转换为ARGB值
演示文件:
要将十六进制值转换为ARGB十进制形式,使用下面的代码:
function hextoargb(val:Number) { var col={} col.alpha = (val >> 24) & 0xFF col.red = (val >> 16) & 0xFF col.green = (val >> 8) & 0xFF col.blue = val & 0xFF return col }
使用方法:
argb=hextoargb(0xFFFFCC00); alpha=argb.alpha; red=argb.red; green=argb.green; blue=argb.blue;
使用actionscirpt创建Bitmap
在actionscrpt运行创建bitmap,需要我们先创建bitmap类实例,如下代码:
myBitmap=new flash.display.BitmapData(width,height,transparent,fillColor)
Bitmap类存在于flash.display类包中,为了减少我们的输入量,在创建类实例时可以先导入类,如下代码:
import flash.display.BitmapData;
然后你就可以创建bitmap类的实例了,如下代码:
var myBitmap = new BitmapData(width,height,transparent,fillcolor);
BitmapData类构造函数接收四个参数分别是width(宽),height(高),transparent(透明度)和 fillcolor(添充色)。Width和height用来指定所创建的bitmap的大小,如果你把bitmap想象为一个网格,那么宽就是水平方向 的像素个数,高就是垂直方的像素个数。Tansparent是一个布尔值(true/false),它用来指定你是否打算让bitmap包含透明。 Fillcolor参数用来指定在bitmap中每个像素的32位颜色。然而,如果你设置你的transparent值为false,那么前8bit所指 定的颜色就会被忽略,因为在那种情况下就没有必要在传输32位的十六进制数了。取而代之的是,你可以传传输24位的十六进制数如0xFFFFFF的白色像 素。Transparent和fillcolor两个参数是可选参数,如果你忽略他们,那么在内存中的bitmap就不会有透明并且每个像素都默认是白色 如0xffffffff.
例如,你要创建一个黑色的100*100大小的,完全不透明的bitmap. 你需要用到如下代码:
import flash.display.BitmapData; myBitmap = new BitmapData(100,100,false,0Xff00000000);
注意:bitmap在flash player的限制大小为2880像素,如果你想创建超过这个大小的bitmap,那么bitmap是不会被创建的。因为创建超过限制大小的bitmap的会吞掉许掉客户端的RAM.
一旦你创建完了bitmapData 类的实例,你就有了众多的bitmapData方法可以使用,用来操作你的bitmap。例如,你可以指定滤镜效果,添充色彩,编辑色彩,使某个区域透明 等等,可能性是无穷的。然而在这篇文章中我们主要研究一些基础的内容,帮助你开始,并发现。
清除BitmapData
一个BitmapData对象实例可以很快的吃掉访问者的内存,bitmap中的每个像素都要使用内存中的4个字节来保存。如果你创建的bitmap有 500*500的大小,它将消耗掉1M左右的内存,如果你不在需要一个Bitmap对象,那最好的习惯是释放Bitmap所使用的内 存,BitmapData提供了一个方法,帮你处理此事,dispose()方示,你只需要如下操作:
myBitmap.dispose();
记得要在你不使用BitmapData时,清掉bitmapData.以释放内存。