分享
 
 
 

flash 8 BitmapData 类的应用

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

BitmapData类是什么

Flash.display.bitmapData允许我们使用像素层级来控制位图,这意味着什么呢,好,在下面的简介中我们将简介它能做什么。

·复制和粘贴整个图像,部分图案。或者是每一个独立的像素。

·鉴别或是改变像素或是像素群组的颜色。

·应用新的FLASH滤镜。

·创建随机的像素(noise或perlin noise)等等。

它还可以将bitmapDate应用到视频上。

创建bitmapData 类的实例

我们用如下的方法创建bitmapData实例

bmap=new flash.display.BitmapData(100,100,false,0);

BitmapData类提供了四个参数

width(number数值,像素宽)

Height(number数值,像素高)

Alpah值(boolean布尔值)

Default background color fill(默认添充的背景色)(number数值)

因此从上面代码,我们可以看出我创建了一个100*100方形,不允许alpha透明,指定0为背景色,也就是黑色。

注意:到目前为,我不能确定是否alpha值只与BMD的背景alpha相关连,或是它是否只是允许图像中的像素透明。

Copy & Paste

复制和粘贴

也许最好的例子就是从最基础的复制和粘贴操作开始。想象一下通过BMD从图像上来复制和粘贴像素。例如,在flashmx2004或是更早的版本中,载入图像到movieclip中然后在movieclip中复制来查看所复制的图像是不可能的。因为任何载入的图像都必须重新加载,如果你想看更多的复制内容。

我们当然也可以在创作时手动的导入图片,也许这是最简单方法,我们将在第一例子中使用这种方。

下载第一个范例文件sample fla(bmap.zip),在你继续进行之前,先快速的看一下这个文件。

这里面有三个对象是关于”复制和粘贴”的.

1.源图像(source)

2.创建的BitmapData实例(bmap)

3.目标MovieClip(dest2)

对于目标MovieClip的创建我们可以选择两种方式

1.手动创建一个MovieClip,本例中设置的长宽分别为100.

2.以使用CreateEmptyMovieClip();来创建。

在我们的第一个例子中,我们使用的方法是第一种,在创作时创建一个movieClip.

Example 1:

范例1

我们已经放置了两个MovieClip在主场景中。

第一个MovieClip中包含一个图片,大小是100*100像素,实例名称为source.第二个MovieClip包含一个橙色的图形,大小也是100*100像素,这个MC的实例名为dest2.

为了复制整张图像,我们可以如下来做:

代码:

bmp=new flash.display.BitmapData(100,100,false,0);

bmap.draw(source);

dest2.attachBitmap(bmp,1);

第一行我们创建了BMD的实际,名为bmp并且它的大小与我们图像的大小是一致的。第二行,在BMD上复制图像,你可以用下例语法将一个movieClip放在BMD中。

SomeBMDinstance.draw(someMovieClip);

最后我们想看到在BMD上的复制结果,当前你并不能看到结果直到你将它贴加到一个MovieClip上为止。如下语法:

代码:

destinationMC.attachBitmap(someBMDinstance,depth);

注意:attachBitmap实际上有4个参数,全部参数如下:

attachBitmap(bmp:BitmapData, depth:Number, pixelSnapping:String, smoothing:Boolean)

前两个参数一个是bitmapdata类的引用名,一个是深度。

第三个参数pixelSnapping(像素对齐)有三种选择,

Auto:当位图没有进行变形或是旋转来进行像素对齐。

Always:不管位图是否进行过变形或是旋转都要进行像素对齐。

Never:从不进行像素对齐。

默认下为auto.

第四个参数:smoothing(光滑):它是布尔值,用来决定是否对缩放过的图像进行光滑。

在本例中我们只需要用到前两个参数。在你测试运行的时候,你就会发现源图像已经被复制到目标MC中了。

那么,现在我们回到开始我们说过的使用创作时手动创建或是使用createEmptyMovieClip()创建的MovieClip。当我们将BMD的实例粘贴到我们创建的MC中时,我们会想到一些问题,比如,如果BMD实例大于source影片剪辑,或是目标MC(dest2)小于BMD实例等等会发生什么呢。

下面我们将用几张图片的形式来说明问题:

需要注意的是,图片下面说明文字中的source源和dest2目标MC不是指的是影片剪辑本身而指是影片剪辑内的内容,如果要指定影片剪辑会加说明。

souce源里面的内容:100*100px(影片剪辑本身未缩放);

dest2目标剪辑的内容:100*100px(影片剪辑本身未缩放)

BMD实例:(这里面的大小是指创建时指定的大小,看代码)100*100px.

下面是我们实验的内容:

souce源里面的内容:100*100px(影片剪辑本身未缩放);

dest2目标剪辑的内容:50*50px(内容进行了缩放,影片剪辑本身未缩放)

BMD实例: 100*100px.

注意:虽然目标里的内容只有源MC里内容的一半,但复制的内容大小仍是BMD实例的大小。

souce源里面的内容:100*100px(影片剪辑本身未缩放);

dest2目标剪辑的内容:100*100px(内容未进行缩放,影片剪辑本身缩放50*50)

BMD实例: 100*100px.

我们看出整个源的内容已经被获取,并复制到目标中,由于目标进行了缩放,所以图像也进行了缩放。

souce源里面的内容:100*100px(影片剪辑本身未缩放);

dest2目标剪辑的内容:50*50px(内容进行缩放,影片剪辑本身缩放200*200)

BMD实例: 100*100px.

目标MC的内容缩了,目标MC的大小缩放到200*200,发现BMD实例复制后的图像与目标的内容大小无关,而与目标MC的大小有关。

如果BMD实例的大小小于源MC中的内容大小,只复制了部分内容,而不是整个图像。

BMD实例内容小于BMD的大小,仍获取整张图像。

Star 1 Example:

星星范例:

你可以从这里下载源文件:stars.zip。我们在下面需要用到它。

在这个范例中我们同时也会用filter.你可以看一篇教程flash8 mealstrom基础的用法。

打开源文件后,你看的AS一层中的代码,如下:

代码:

var w:Number = Stage.width;

var h:Number = Stage.height;

var star:MovieClip;

//版本检测 check

var versionNums:Array = $version.toString().split(" ");

inform.text = (Number(versionNums[1].substr(0,1)) < 8) ? "You need the Flash 8 player to view this movie!" : "" ;

//Create children

var sourceMC:MovieClip = this.createEmptyMovieClip("sourceMC", this.getNextHighestDepth());

var destMC:MovieClip = sourceMC.createEmptyMovieClip("destMC", sourceMC.getNextHighestDepth());

var screenShot = new flash.display.BitmapData(w, h, true, 0);

//-------------------------------------------|

destMC.onEnterFrame = function()

{

drawStar();

capture();

drawToScreen();

}

//-------------------------------------------|

function drawStar()

{

star = sourceMC.attachMovie("star", "star", 1); //attach at 1

glow.color = Math.floor(Math.random()*0xFFFFFF);

star.filters = [glow,bevel];

star._x = getRandomInt(w, (star._width/2));

star._y = getRandomInt(h, (star._height/2));

}

//-------------------------------------------|

function capture()

{

destMC._visible = false;

screenShot.draw(sourceMC);

destMC._visible = true;

}

//-------------------------------------------|

function drawToScreen()

{

destMC.attachBitmap(screenShot, 1); //attach at 1

}

//-------------------------------------------|

function getRandomInt(max, sub):Number

{

return Math.floor(Math.random() * ((max+1)-(sub*2)) + sub);

}

我获取了屏幕的宽和高,动态创建了两个movieClip.一个是sourceMc.另一个是destMc.然后在创建bitmapData的实例。

下一步,我加入了一些代码在onEnerFrame方法中:

代码:

destMC.onEnterFrame = function()

{

drawStar();

capture();

drawToScreen();

}

We draw a star on the stage, take a screenshot, and finally tran

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有