Flash8 BitmapData

作者: egoldy

性质: 翻译

阅读次数: 21399

发表时间: 2006-11-21 16:56:37


声明:此教程来自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.以释放内存。

服务项目_SERVICE

关于我们

万博思图(北京)信息技术有限公司,专业的flash,flex开发团队,5年经验。公司致力于互联网上的业务的开展,对于互动网站行销,互联网应用程序开发有成熟的解决方案。我们关注互联网市场动态,关注新技术,更注重在新的领域不断探索发现。
万博思图业务内容主要包括企业品牌Flash网站开发,企业形象宣传Flash设计,动画,多媒体演示,Flex企业级应用程序开发,拥有众多成功案例,欢迎来电咨询。
 
COPYRIGHT BY WEBSTUDIO INTERACTIVE DESIGN Co.,Ltd. ALL RIGHTS RESERVED.
公司地址: 北京市朝阳区朝外SOHO D 座727室 邮编: 100026 EMAIL: WEBSTUDIO@WEBSTUDIO.COM.CN
电话: 010-59070059 / 010-86390986-802  手机: 13693660520 传真: 010-59070059-801
京公网安备:110108006741      京ICP备08002333号-4
王先生