`

理解Loader、Bitmap和BitmapData对象之间的关系

    博客分类:
  • Flex
阅读更多

在Loader对象实例中,被引用图片的位图数据存放在一个Bitmap对象中。 Loader对象将图片作为位图数据进行加载,但随后会将数据存放在一个Bitmap对象中(再次说明,一个Bitmap对象会引用一个 BitmapData对象)。 Bitmap对象实例是Loader对象实例的内容(子元素)。 这个结构的层次看起来像是这样的:Loader对象 > Bitmap对象 > BitmapData对象。

Loader对象现在是图片数据的主要显示对象。被引用图片的信息,例如它的URL或者它加载时使用的任何查询变量,可以使用ActionScript通过Loader对象的contentLoaderInfo属性获取。

注: 在flash.display.LoaderInfo.init事件被派发之前,图片的宽度和高度等属性是 不能被已载入的图片或正在加载图片的loader对象访问的。如果您尝试在addChild()语句之后去获取或者设置宽度或者高度值,您将会获得0值 (属性设置不会起作用),因为从本地或者远程文件系统读取文件需要一定的时间。所以,请在LoaderInfo.init或者 LoaderInfo.complete事件处理器中为已载入的图片设置属性。

下面的例子比前面的例子要复杂得多,但是它表明位图数据是包含在一个Bitmap对象实例中的图片数据(而不是一个图片本身的实例)。 而且,它也表明Bitmap对象实例是Loader对象实例的子对象。 这个示例使用一个单一的Loader对象实例来引用单一图片的位图数据,然后重用这个图片数据在舞台上创建多个Bitmap对象实例。 因此,您可以独立操作每个Bitmap对象实例,并获得更多控制。

注: BitmapData对象实例的改变,例如使用类似BitmapData.setPixel()或者BitmapData.draw()等方法所引起的改变,会反映在每个引用BitmapData对象实例的Bitmap对象实例中。

这个例子简单地对外部图片进行了一次调用。 在数据初始载入之后,Flash Player可以多次重用图片数据。 对图片文件的单一调用比多次调用更加有效,并且这个方法在创建更为复杂的需要重复使用同一个图片文件的Flash应用程序时尤其有用。 下面的示例可以创建多个Loader对象实例以及独立操作每个Loader对象实例,这个例子的目的是演示如何利用Loader、Bitmap和 BitmapData之间的关系来节省内存和加载时间。

具体来说,下面的例子定义了一些用于所提供的代码中的函数的变量。并且为LoaderInfo.complete事件建立了一个监听器。 ldr.load()语句一次性地载入了一个外部图片的位图数据(flowers.jpg)并保存在Loader对象实例中。当load方法完成图片数据 的载入后,Loader对象实例会自动创建一个内部的Bitmap对象来存储和显示已载入的位图数据,并将位图信息保存在它自己的ldr.content 属性中。然而,这个content属性具有DisplayObject的数据类型,因为一个Loader对象可以载入图片和SWF文件。因此,下面的例子 使用一个as操作符来保存图片数据到一个自定义的Bitmap数据类型的bmp变量中。然后,位图数据被用来显示五个独立的Bitmap对象实例,来构成 一个立方体的每个面(除了前面)。

示例

bee_in_a_box.fla示例文件对这个例子进行了说明。 请下载bee_in_a_box.fla并打开该文件。 查看位于时间轴第1帧的代码:


// 为外部图片文件名创建一个变量
var IMAGE_URL:String = new String("flowers.jpg");
// 创建一个loader对象来载入图片数据
var ldr:Loader = new Loader();
// 为每个添加到显示列表的图片实例创建变量,这些图片将形成一个立方体,我们需要5个实例,分别用来作为立方体的各个侧面,除了前面:
var bitmap1:Bitmap; var bitmap2:Bitmap;
var bitmap3:Bitmap; var bitmap4:Bitmap;
var bitmap5:Bitmap;
// 创建一个变量来将bumblebee影片剪辑保存在资源库中。资源库中的影片剪辑被设置为
export for ActionScript(导出为ActionScript) var mybee:bumblebee = new bumblebee();
// 建立一个事件监听器用来在图片数据完全载入之后创建舞台上的图片实例
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, addSides);
// 从图片文件载入图片数据
ldr.load(new URLRequest(IMAGE_URL));
// 在COMPLETE 事件被发送之后, 开始创建舞台中已导入的图片实例
function addSides(evt:Event):void {
// 使用as操作符将loader数据传输给一个Bitmap对象
var bmp:Bitmap = ldr.content as Bitmap;
// 创建一个位图实例
bitmap1 = new Bitmap(bmp.bitmapData);
// 旋转该实例来创建3D效果
bitmap1.rotationX = 90;
// 将该实例添加到显示列表中
addChild(bitmap1);
bitmap2 = new Bitmap(bmp.bitmapData);
bitmap2.z = 400;
bitmap2.rotationY = 90;
addChild(bitmap2);
bitmap3 = new Bitmap(bmp.bitmapData);
bitmap3.z = 400; addChild(bitmap3);
bitmap4 = new Bitmap(bmp.bitmapData);
bitmap4.z = 0; bitmap4.x = 400;
bitmap4.rotationY = 270;
addChild(bitmap4);
bitmap5 = new Bitmap(bmp.bitmapData);
bitmap5.y = 400;
bitmap5.z = 400;
bitmap5.rotationX = 270;
addChild(bitmap5);
// 现在立方体的侧面完成了,需要添加bumblebee影片剪辑了,请您在立方体侧面完成之后再添加bumblebee影片剪辑,这样它会显示在立方体的前面
addBee();
}
// 这个函数将bumblebee影片剪辑的实例从资源库中添加到显示列表中。
function addBee(): void {
mybee.x = 100; mybee.y = 100; addChild(mybee);
}

 


通过选择Control(控制) > Test Movie(测试影片)来测试影片。 或按Ctrl + Enter键(Windows)或Command+Return键(Mac OS)来运行SWF文件。

现在,请执行下列步骤:
•1.创建一个新的Flash Professional文件(ActionScript3),然后将其保存在包含名为flowers.jpg的位图图片的文件夹中。
•2.使用Library弹出式菜单选择bee_in_a_box.fla库。 将bumblebee影片剪辑拖拽到舞台上。 然后,重新设置弹出式菜单以显示当前文件的资源库(请注意bumblebee影片剪辑和相关的资源现在已经在当前文件的资源库的列表中被显示出来了)。 删除舞台上的bumblebee影片剪辑。
•3.选择时间轴的第1帧,并且复制前面的代码示例到Script(脚本)窗口中。
•4.通过选择Control(控制) > Test Movie(测试影片)或者按Ctrl + Enter键(Windows)或Command+Return键(Mac OS)来测试影片。

结果


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wkyb608/archive/2011/01/30/6169727.aspx

分享到:
评论

相关推荐

    flash as3 加载图片的两种方法

    在Flash ActionScript 3.0 (AS3) 中,加载...总结,Flash AS3 加载图片可以通过Loader 和BitmapData 两种方式实现,选择哪种取决于具体需求和场景。了解并熟练掌握这两种方法,将有助于提高AS3 开发中的图像处理能力。

    flash加载外部图片

    首先,我们需要了解Flash中的两种主要的图片加载方式:使用Loader类和使用BitmapData类。Loader类是ActionScript 3.0中用于加载图形内容的主要工具,包括图片、SWF文件等。BitmapData类则用于处理位图数据,它可以...

    AS3 FlashDevelop导入图片

    在AS3(ActionScript 3)开发环境...通过理解`Loader`、`BitmapData`和`Bitmap`类,以及如何设置项目结构和资源管理,你可以轻松地在AS3项目中实现丰富的视觉效果。记住,良好的代码组织和资源管理能显著提高开发效率。

    AS3 加载图片圆滑处理

    5. **创建Bitmap对象**:最后,使用BitmapData创建一个Bitmap对象,并将其添加到舞台上显示。 ```actionscript var bitmap:Bitmap = new Bitmap(bitmapData); addChild(bitmap); ``` 以上代码展示了基本的图片加载...

    显示BMP的AS3支持类库

    3. **BitmapData与Bitmap对象**: 在AS3中,BitmapData类用于存储位图信息,而Bitmap类则用于在舞台上显示BitmapData。BMPDecoder可能将BMP文件解析为BitmapData,然后创建Bitmap对象进行显示。 4. **使用.txt**: 这...

    flash管理图片只需修改图片就可以

    加载完成后,你可以将Loader对象添加到舞台,或者获取它的content属性(即BitmapData或Bitmap对象)进行进一步操作。 5. **事件监听**:在加载图片时,通常需要监听ProgressEvent.PROGRESS和Event.COMPLETE事件。当...

    as3 等比切割图片,一键切割图片保存+自动命名图片

    在本文中,我们将深入...通过理解BitmapData类和相关API,你可以实现各种复杂的图像处理任务,如等比切割图片,并且能够一键保存和自动命名图片。这个功能在网页设计、游戏开发、图像编辑等多个领域都有广泛的应用。

    Flex 游戏入门级----------------位图切割,人物行走

    4. 创建 Bitmap 对象:切割完成后,可以创建 Bitmap 对象,将 BitmapData 设置为其源,然后将其添加到舞台上显示。 二、人物行走动画 人物行走动画涉及帧序列或精灵表(Sprite Sheet)的使用。在 Flex 中,你可以...

    Flash图片放大技术源码实例.rar

    8. **Stage显示**:最后,放大后的BitmapData对象会被放入一个新的Bitmap对象中,然后添加到舞台的显示列表,从而在屏幕上显示出来。 通过以上分析,我们可以看到,Flash图片放大技术的核心在于如何通过编程技术...

    flash实验指导

    2. **Bitmap和BitmapData类**: - `Bitmap`类用于处理位图图像,它可以与`Loader`类结合使用,将加载的位图数据转化为可显示的对象。 - `BitmapData`类提供了对位图像素的直接访问,可以使用`getPixel()`方法获取...

    Flash网络游戏开发入门经验共享

    5. **位图操作**:Bitmap 和 BitmapData 对象的使用,允许动态处理图像,实现游戏中的图形变换和效果。 6. **层管理**:在MMORPG游戏中,不同元素的层次关系至关重要。学会如何管理和调整DisplayObject在显示列表中...

    Flash随机背景特效.rar

    以上代码首先加载了随机选择的图片,加载完成后,将图片绘制到BitmapData对象上,然后创建一个Bitmap对象并添加到舞台上,从而完成了背景图片的更换。 这个简单的实例展示了Flash的强大功能和灵活性,通过随机数的...

    flash加载外部位图

    5. **释放资源**:在不再需要加载的位图时,别忘了释放Loader对象和相关的Bitmap对象,以避免内存泄漏。 ```actionscript removeChild(loadedBitmap); loadedBitmap = null; loader.unloadAndStop(true); ...

    调用swf中导出的类,按钮,MC,图片等

    3. 在加载完成后,通过`getDefinitionByName()`获取导出的类,或遍历`Loader.content`访问按钮、MovieClips和其他显示对象。 4. 实例化类、添加事件监听器、显示图片等。 在实际开发中,确保遵循良好的编程实践,如...

    as3 图片展示

    首先实例化一个Loader对象,然后调用它的`load()`方法,传入一个URLRequest对象,指向图片文件的路径。 ```actionscript var loader:Loader = new Loader(); var urlRequest:URLRequest = new URLRequest("image...

    ProgressiveLoader 渐进式加载图像

    10. **显示对象树**:将加载的 BitmapData 显示在舞台上,通常会创建一个 Bitmap 对象,将 BitmapData 设置为其 source,然后将 Bitmap 添加到显示列表中。 通过以上知识点的应用,我们可以实现一个渐进式加载图像...

    Flex里用IconUtility动态加载Icon

    3. 创建`BitmapData`对象:等待图标加载完成,然后使用`Loader.content`获取`Bitmap`对象,并创建一个`BitmapData`对象,如`var bitmapData:BitmapData = Bitmap(loader.content).bitmapData;` 4. 处理图标:根据...

    Flex 动态加载 Image 和 Icon 解决方案

    你可以先加载图像,然后使用 `Loader` 的 `content` 属性获取 `BitmapData` 对象: ```actionscript loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoadedWithBitmapData); loader.load(new ...

    flash_images_FlashVars.rar

    var bitmapData:BitmapData = Bitmap(event.target.content).bitmapData; // 根据"effect"应用效果,如"fade" if (effect == "fade") { fadeIn(bitmapData); } else { // 其他效果处理... } // 将处理后...

    as3 bimapdata 波浪效果

    4. 更新显示对象:将扭曲后的BitmapData应用到DisplayObject(如Bitmap对象)上,然后将其添加到舞台上,以显示波浪效果。 5. 动画循环:在每一帧中重复步骤3和4,通过改变时间参数来创建连续的动画效果。 在压缩包...

Global site tag (gtag.js) - Google Analytics