`
txf2004
  • 浏览: 7041405 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

如何使用BitmapData类

阅读更多

如何使用BitmapData

什么是Bitmap类呢?它究竟能为我们做什么呢?

BitmapData/flash.display.BitmapData正如其拉丁文字面意义一样,它为我们提供了一个使用FLASH处理像素级别位图的API,当然这个类能够完成的功能很多,但是在这篇教程里我们主要使用它来光滑在程序运行时动态导入的图片对象

导入图像

在我们使用这个类之前,我们首先要导入它,当然有很多种方法,但是我推荐的最佳方法是导入并使用MovieClipLoader ,他提供了更大的灵活性,如果我们需要在未来改进的时候扩充功能的话,那么无疑使用这个类更具灵活性。

首先创建一个MovieClipLoader类的实例,并为它添加一个监听器以便在图像装载的时候捕捉这个事件并进行相关的处理。

vartempImageMCL:MovieClipLoader=newMovieClipLoader();
vartempImageListener:Object
=newObject();
tempImageMCL.addListener(tempImageListener);

NowweuseloadCliptoimportourimage:

tempImageMCL.loadClip(imageURL,tempMc)

使用onLoadInit我们就可以在图像装载的第一时间对该位图数据进行处理

tempImageListener.onLoadInit = function(mc:MovieClip) {

//第一步:创建BitmapData实例,并设定MC的大小
//BitmapData(width:Number,height:Number,[transparent:Boolean],[fillColor:Number])
varlinkImage:BitmapData=newflash.display.BitmapData(tempMc._width,tempMc._height,true,0x00FFFFFF);

//第二步:将MC的内容绘制进linkImagebitmap
linkImage.draw(tempMc);



//第三步:将位图链接到目标MC
//attachBitmap(bmp:BitmapData,depth:Number,[pixelSnapping:String],[smoothing:Boolean]):Void
_imageContainer.attachBitmap(linkImage,2,"auto",true)
_imageContainer.cacheAsBitmap
=true;



}

下面是每个步骤的详细分解

第一步

我们先要创建一个BitmapData 对象并传递一些参数初始化该对象。

var linkImage:BitmapData = new flash.display.BitmapData(width:Number, height:Number, [transparent:Boolean], [fillColor:Number])

width:Number - 位图的宽度【以像素为单位】使用MC的宽度作为要装载的对象的宽度,例如tempMc._width.这就避免了我们为对象设置静态的数据的同时程序装载的图像是不同的尺寸

height:Number - 位图的高度【以像素为单位】同位图的高度

transparent:Boolean [可选] - 确定位图的透明度支持单位像素的透明度,默认值是TRUE(也即透明),如果要创建一个透明的图像,那么将此属性设置为TRUE并且将填充色设置为0x00000000/0

fillColor:Number [可选] - 用来填充位图区域的32位的ARGB色,缺省值是0xFFFFFFFF (白色)

第二步:

下面我们就可以将我们的图像从我们临时的MC中取出并绘制出来。

linkImage.draw(tempMc);

第三步:

将BitmapData 链接到我们的目标MC了,当然最终达成了我们光滑的边界的目标(如果你的目标MC会改变大小,那么该效果将更加明显)

imageContainer.attachBitmap(bmp:BitmapData, depth:Number, [pixelSnapping:String], [smoothing:Boolean]) : Void

bmp:flash.display.BitmapData -这就是你所创建的一个图像,也即透明的位图

depth:Number - 设置在MC的何处放置该位图,整数值

pixelSnapping:String [可选] - 像素拉折模式:auto, always, 和never.缺省值是auto

smoothing:Boolean [可选] -光滑模式当设置为TRUE的时候就是允许的,而FALSE的时候就是不允许的,默认是不允许的,当然要将此值设为TRUE,我们整篇文章为了什么?

对于多个图像,最好将其封装进函数并加载到不同的MC这样你就不用不停的装载图像了。

当然你也可以将这些图像装进一个数组来保持对各个对象的引用

下面是完整的代码

function _loadTempImage(imageURL:String, mc:Movieclip){

//create new MovieClipLoader
var tempImageMCL:MovieClipLoader = new MovieClipLoader();

//create a new listener object for the MovieClipLoader
var tempImageListener:Object = new Object();

//add water, i mean listener to the MovieClipLoader
tempImageMCL.addListener(tempImageListener);

//Now we use loadClip to import our image:
tempImageMCL.loadClip(imageURL, tempMc)

tempImageListener.onLoadInit = function(mc:MovieClip) {

// Step 1: Create a new BitmapData instance and make it the size of the movie clip
// BitmapData(width:Number, height:Number, [transparent:Boolean], [fillColor:Number])
var linkImage:BitmapData = new flash.display.BitmapData(tempMc._width, tempMc._height,true,0x00FFFFFF);

// Step 2: Draw the contents of the movie clip into the linkImage bitmap
linkImage.draw(tempMc);

// Step 3: Attach the bitmap into the target movie clip.
// attachBitmap(bmp:BitmapData, depth:Number, [pixelSnapping:String], [smoothing:Boolean]) : Void
_imageContainer.attachBitmap(linkImage, 2, "auto", true)
_imageContainer.cacheAsBitmap = true;

}

}

希望上面所说的能够对你有所帮助,如果你有什么问题的话,请到下面的连接去留下你的问题

源文档 <http://www.ideaography.net/bitmapdata-and-you/>

BitmapData Class and you

February 20th, 2008 · Comment

What is this BitmapData I hear you asking, and what can it do for me?

BitmapData or flash.display.BitmapData as its known in Latin, provides us with pixel-level control of bitmaps within flash. There are many things that bitmapdata can be used for, but for this tute we will be discussing how it can be used to smooth images that dynamically imported at run-time.

Importing the Image

Before we can actually use the BitmapData class on an image, we need to import it. There are many methods in flash to do this, but the best method to use i think is MovieClipLoader as it allows more flexibility in the future when adding in new functions and pre-loaders.

Firstly create an instance of the MovieClipLoader class and add a listener to launch into attack when a image is loaded, like so:

var tempImageMCL:MovieClipLoader = new MovieClipLoader();
var tempImageListener:Object = new Object();
tempImageMCL.addListener(tempImageListener);

Now we use loadClip to import our image:

tempImageMCL.loadClip(imageURL, tempMc)

Using the onLoadInit, we can now get to the BitmapData Loving once the image has loaded in.

tempImageListener.onLoadInit = function(mc:MovieClip) {

// Step 1: Create a new BitmapData instance and make it the size of the movie clip
// BitmapData(width:Number, height:Number, [transparent:Boolean], [fillColor:Number])
var linkImage:BitmapData = new flash.display.BitmapData(tempMc._width, tempMc._height,true,0x00FFFFFF);

// Step 2: Draw the contents of the movie clip into the linkImage bitmap
linkImage.draw(tempMc);

// Step 3: Attach the bitmap into the target movie clip.
// attachBitmap(bmp:BitmapData, depth:Number, [pixelSnapping:String], [smoothing:Boolean]) : Void
_imageContainer.attachBitmap(linkImage, 2, "auto", true)
_imageContainer.cacheAsBitmap = true;

}

Here's the breakdown of each step:

Step 1

We firstly have to create a BitmapData object, passing through some parameters in the process.

var linkImage:BitmapData = new flash.display.BitmapData(width:Number, height:Number, [transparent:Boolean], [fillColor:Number])

width:Number - The width of the bitmap image in pixels. Use the width of the movieClip that the tempimage loaded into. i.e. tempMc._width. This save's us from having to add static values in the code incase we are using different sized images.

height:Number - The height of the bitmap image in pixels. As with the width, use the height of the movieClip that the tempimage loaded into. i.e. tempMc._height.

transparent:Boolean [optional] - Specifies whether the bitmap image supports per-pixel transparency. The default value is true (transparent). To create a fully transparent bitmap set the value of the transparent parameter to true and the value of the fillColor parameter to 0x00000000 (or to 0).

fillColor:Number [optional] - A 32-bit ARGB colour value that you use to fill the bitmap image area. The default value is 0xFFFFFFFF (solid white).

Step 2

We now can draw the image from our temporary movieClip into our newly created BitmapData object

linkImage.draw(tempMc);

Step 3

Time to attach the BitmapData into our target movieClip (_imageContainer) and marvel in all its smoothed out glory. (You will probably notice the effect more if the target clip has been resized or altered in some way.)

imageContainer.attachBitmap(bmp:BitmapData, depth:Number, [pixelSnapping:String], [smoothing:Boolean]) : Void

bmp:flash.display.BitmapData - A transparent or opaque bitmap image. This is the BitmapData object you just created.

depth:Number - An integer that specifies the depth level within the movie clip where the bitmap image should be placed.

pixelSnapping:String [optional] - The pixel snapping modes are auto, always, and never. The default mode is auto.

smoothing:Boolean [optional] - The smoothing mode is either true for enabled or false for disabled. The default mode is disabled. Be sure to set this option to true, as all our efforts here will be for nothing and the BitmapData gods will be displeased.

That's basically it.

For multiple images, its best to separate out the movieclipLoader and BitmapData into functions and load each image into a unique movieclip so you don't have to keep reloading the images.

You can keep track of all the temp image movieClips by pushing them into an array as i have done in my full screen gallery flash class.

Here's the all the code from above added into a function so we can call it anytime we please:

function _loadTempImage(imageURL:String, mc:Movieclip){

//create new MovieClipLoader
var tempImageMCL:MovieClipLoader = new MovieClipLoader();

//create a new listener object for the MovieClipLoader
var tempImageListener:Object = new Object();

//add water, i mean listener to the MovieClipLoader
tempImageMCL.addListener(tempImageListener);

//Now we use loadClip to import our image:
tempImageMCL.loadClip(imageURL, tempMc)

tempImageListener.onLoadInit = function(mc:MovieClip) {

// Step 1: Create a new BitmapData instance and make it the size of the movie clip
// BitmapData(width:Number, height:Number, [transparent:Boolean], [fillColor:Number])
var linkImage:BitmapData = new flash.display.BitmapData(tempMc._width, tempMc._height,true,0x00FFFFFF);

// Step 2: Draw the contents of the movie clip into the linkImage bitmap
linkImage.draw(tempMc);

// Step 3: Attach the bitmap into the target movie clip.
// attachBitmap(bmp:BitmapData, depth:Number, [pixelSnapping:String], [smoothing:Boolean]) : Void
_imageContainer.attachBitmap(linkImage, 2, "auto", true)
_imageContainer.cacheAsBitmap = true;

}

}

Hope it was as good for you as it was for me. If you have any question's or just want to say how great this tute was, please leave a comment below.

Happy Bitmapping...

源文档 <http://www.ideaography.net/bitmapdata-and-you/>

分享到:
评论

相关推荐

    flash as3 加载图片的两种方法

    另一种方法是使用BitmapData 类直接加载图片。虽然不如Loader 方便,但在某些情况下可能更合适。以下是步骤: 1. 创建一个BitmapData 对象实例,并指定图像的宽度和高度。 ```actionscript var bitmapData:...

    flash加载外部图片

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

    使用C#的BitmapData

    在C#中,`BitmapData`类是用于高效地访问和操作位图图像像素的核心类。这个类在处理大量像素操作时尤其有用,因为它允许直接访问图像数据的内存缓冲区,而无需通过昂贵的属性访问。`BitmapData`提供了一种优化的方法...

    flash调用摄像头拍照和上传的学习地址

    为了实现拍照和上传功能,开发者还需要结合使用BitmapData类和URLRequest类。BitmapData类用于处理位图数据,而URLRequest类则负责构建HTTP请求,将位图数据发送到服务器。 #### BitmapData类详解 BitmapData类允许...

    actionscript专注图片处理的新书

    本书将教授读者如何使用BitmapData类来处理图像数据,包括但不限于改变图像的颜色深度、旋转图像、裁剪图像等操作。此外,还将介绍如何通过访问和修改图像的每个像素来实现更高级的图像处理效果,如模糊、锐化、颜色...

    [转] BitmapData 基础部分2

    在AS3中,BitmapData类允许我们创建、读取、修改和操作位图数据,这些位图数据可以与DisplayObject类(如Bitmap对象)关联,用于在舞台上显示。以下将详细讲解BitmapData的基础知识,并结合提供的文件名称列表,推测...

    c#24位图像转8位灰度图像(数组方式).docx

    该代码使用了 BitmapData 类来锁定图像数据,并使用 Marshal.Copy 方法将图像数据 Copy 到数组中,然后对数组进行处理来实现图像转换。 首先,需要创建一个新的 Bitmap 对象,并设置其宽度和高度,然后锁定图像数据...

    flash image处理类库

    在Flash中,可以使用BitmapData类来处理图像数据。BitmapData对象可以用于读取、写入和操作位图。例如,你可以将一个JPEG图像转换为BitmapData对象,然后进一步处理,如调整大小、裁剪或应用滤镜效果。 3. 字符与...

    webcam调用摄像头拍照代码

    在ActionScript中,可以使用Camera类来访问摄像头,并使用BitmapData类来捕获图像。以下是一个简单的ActionScript示例: ```actionscript var camera:Camera = Camera.getCamera(); var stageRef:Stage = this....

    ActionScript 3 BitmapData 的例子

    本篇文章将深入探讨BitmapData类及其在实际应用中的示例。 1. BitmapData基础 BitmapData类允许开发者创建、加载和操作位图数据。它包含一个二维像素数组,每个像素由红、绿、蓝和透明度(alpha)四个通道组成。你...

    位图噪声效果BitmapData类的运用

    BitmapData类实例 运用噪声制作一些好的效果 源码

    tx.rar_图像

    在ACTIONSCRIPT 3.0(通常与FLASH Professional一起使用)中,我们可以使用BitmapData类来处理图像。BitmapData对象是位图图像的内存表示,它提供了直接访问像素数据的能力,从而实现各种图像处理效果。 1. **透明...

    flex-图片保存-本地磁盘-单个ui截屏-整个框架截屏

    在Flex中,我们可以使用BitmapData类来捕获UI组件或整个舞台的画面。BitmapData对象可以表示一个位图,用于绘制、操作像素和创建Bitmap对象。对于单个UI组件的截图,可以先获取组件的DisplayObject实例,然后利用...

    flex生成图片并保存

    在Flex中,我们可以使用BitmapData类来创建和操作位图图像。BitmapData对象可以用来绘制图形、颜色、文本等,甚至可以从舞台上抓取图像。以下是一个简单的示例,展示了如何创建一个包含红色正方形的位图: ```...

    flex动态添加资源

    对于图像资源,可以使用BitmapData类加载和处理位图。通过调用BitmapData.load()方法,可以加载指定URL的图像,并在加载完成后获取BitmapData对象,用于显示或进一步处理。 4. 优化策略: - 使用Content Delivery...

    FLEX中显示类型为BMP的图片

    3. **创建BitmapData对象**:在AS3中,我们可以使用BitmapData类来存储图像数据。解码后的像素数据需要转化为BitmapData对象,这可以通过BitmapData类的构造函数完成。 4. **创建Bitmap对象**:接下来,我们创建一...

    Flex 图片压缩、上传

    在Flex中,我们可以使用BitmapData类来代表图像数据。BitmapData对象可以从本地文件、网络资源或舞台上的DisplayObject中获取,也可以创建一个新的空白图像。对于图片压缩,关键在于调整BitmapData的width和height...

    Flex调用JavaServlet将组件快照导出成图片

    在Flex中,我们可以使用BitmapData类来捕获组件的视觉表示,即快照。BitmapData对象可以用来创建一个新的位图,它能够捕捉任何可见对象的像素数据。以下是如何在Flex中获取组件快照的基本步骤: 1. 导入必要的库: ...

    flex 实现网页在线拍照,支持ie8浏览器

    对于照片预览,我们可以使用BitmapData类。在用户点击拍照按钮后,我们可以调用`Camera.getVideo()`方法来获取当前的视频帧,然后将其转换为BitmapData对象。这可以通过`Camera.getVideo().getSnapshot()`实现。接...

    flash像素级精确选择实现

    在AS3中,可以使用BitmapData类的getPixel()或getPixel32()方法来实现。然后,比较这个像素的颜色与目标对象的颜色,如果匹配,则认为发生了碰撞。 ```actionscript var bitmapData:BitmapData = new BitmapData...

Global site tag (gtag.js) - Google Analytics