- 浏览: 134813 次
- 性别:
- 来自: 苏州
最新评论
-
lanliying:
主窗体报错Multiple markers at this l ...
Flex自定义事件 -
Alex丿:
12年的帖子,难得~。~
Flex编译参数设置
可以使用BitmapData对象加载图片,BitmapData允许使用像素层级来控制位图,其优势如下:
- 可以复制、粘贴整个图像、部分图案,或者是每一个独立的像素。
- 可以鉴别或是改变像素或像素群组的颜色。
- 可以应用滤镜。
- 可以创建随机的像素(noise或perlin noise)等。
- 可以把位图通过encodeBase64方法生成Base64编码字符串存入数据库,使用时通过decodeBase64还原成BitmapData位图对象就可以了。
1、使用BitmapData得到图像数据
1.1、使用BitmapData的draw方法得到图像数据:
[Bindable] [Embed(source="assets/img/music.png")] private var img:Class; private function init():void{ var bd:BitmapData = new BitmapData(img1.width, img1.height); bd.draw(img1); img2.source = new BitmapAsset(bd); } <s:VGroup id="vg" width="200" height="200"> <s:Image id="img1" source="{img}" /> <s:Image id="img2" /> </s:VGroup>
1.2、在flex3中,也可以用如下方法得到图像数据:
private function init():void{ var bd:BitmapData = Bitmap(img1.content).bitmapData; img2.source = new BitmapAsset(bd); }
2、将图片转换成ByteArray和Base64格式数据
有两种方法,一种是使用PNGEncoder或JPEGEncoder对象的encode方法将BitmapData转为ByteArray格式数据;另一种是在前一个基础上,使用Base64Encoder对象的encodeBytes将ByteArray转为Base64格式数据。如果要显示出来,还要转成String格式。
将BitmapData转成ByteArray格式数据后可以使用compress()将数据压缩,要显示图片时,取出ByteArray后调用uncompress()方法将数据解压缩。
[Bindable] [Embed(source="assets/img/music.png")] private var img:Class; protected function btn_clickHandler(event:MouseEvent):void { var bd:BitmapData = new BitmapData(img1.width, img1.height); bd.draw(img1); //也可以使用JPEG格式 new JPEGEncoder(100); var encoder:PNGEncoder = new PNGEncoder(); //转换为二进制数据 var bytes:ByteArray = encoder.encode(bd); var base64:Base64Encoder = new Base64Encoder(); base64.encodeBytes(bytes); //把ByteArray转为Base64编码的字符串 var imgStr:String = base64.toString(); ta.text = imgStr; } <s:Image id="img1" source="{img}" /> <s:Button id="btn" label="Encode" click="btn_clickHandler(event)"/> <s:TextArea id="ta" width="300" height="200" />
3、将ByteArray和Base64格式数据转成图片
如果是Base64格式的数据,要先使用Base64Decoder对象decode解码后转换成ByteArray格式,然后使用Image组件的load方法显示。mx包里面的Image才有load方法,spark包里面的Image没有load方法。
protected function btn1_clickHandler(event:MouseEvent):void { var base64Dec:Base64Decoder = new Base64Decoder(); base64Dec.decode(ta.text); var bytes:ByteArray = base64Dec.toByteArray(); img2.load(bytes); } <s:Image id="img1" source="{img}" /> <s:Button id="btn" label="Encode" click="btn_clickHandler(event)"/> <s:TextArea id="ta" width="300" height="200" /> <s:Button id="btn1" label="Show" click="btn1_clickHandler(event)" /> <mx:Image id="img2" />
深入理解BitmapData和Bitmap类:
- BitmapData存储图片的像素数据,可以看做是加载的或动态创建的位图图像中包含的像素的照片快照。
- Bitmap可以看做是BitmapData对象的包装。多用于Flash中,通常的用法是将BitmapData作为参数实例化Bitmap类(new Bitmap(bitmapData),实例化得到的这个Bitmap对象就是一幅图片了,将该对象添加到舞台或sprite容器即可。例如:
var myImage:Bitmap = new Bitmap(myBitmapDataObject); addChild(myImage);
- Bitmap类不是InteractiveObject类的子类,因此它无法调度鼠标事件。可以使用包含Bitmap对象的容器(例如sprite)来调度鼠标事件。
- 在Flex中,Bitmap是无法直接添加到Flex的舞台或容器中的,所以在得到BitmapData数据后一般会使用Image组件(Bitmap或BitmapAsset作为Image的source)将图片显示出来。加载ByteArray数据时也是用Image的load方法来显示图片。用Bitmap加载ByteArray数据代码如下:
protected function btn1_clickHandler(event:MouseEvent):void { var base64Dec:Base64Decoder = new Base64Decoder(); base64Dec.decode(ta.text); var bytes:ByteArray = base64Dec.toByteArray(); var load:Loader = new Loader(); load.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); load.loadBytes(bytes); } private function onComplete(event:Event):void{ var bm:Bitmap = event.target.content as Bitmap; var ui:UIComponent = new UIComponent(); ui.addChild(bm); this.addChild(ui); }
4、创建图片快照
使用ImageSnapshot类的静态方法captureImage为任何组件创建图片快照,创建快照后可以转为Base64格式数据或ByteArray格式数据。
注意,是任何组件,一般用于生成客户端图像的PDF文件。
private var jpegEnc:JPEGEncoder = new JPEGEncoder(); private var pngEnc:PNGEncoder = new PNGEncoder(); private function capImg(imgEnc:IImageEncoder):void{ var snap:ImageSnapshot; snap = ImageSnapshot.captureImage(img1, 0 ,imgEnc); ta.text = ImageSnapshot.encodeImageAsBase64(snap); var bytes:ByteArray = snap.data as ByteArray; img2.load(bytes); } <s:Image id="img1" source="{img}" /> <s:Button id="btn" label="capture jpeg" click="capImg(jpegEnc)"/> <s:Button id="btn1" label="capture png" click="capImg(pngEnc)" /> <s:TextArea id="ta" width="300" height="200" /> <mx:Image id="img2" />
5、在图片上取色
通过BitmapData对象的getPixel方法返回一个整数,表示BitmapData对象中在特定点(x, y)处的RGB像素值。下面代码实现一个取色器的功能。
protected function img1_mouseMoveHandler(event:MouseEvent):void { var point:int = bd.getPixel(event.localX, event.localY); pl.setStyle("backgroundColor", point); ta.text = "#" + point.toString(16).toUpperCase(); } <s:Image id="img1" source="{img}" mouseMove="img1_mouseMoveHandler(event)" /> <s:Panel id="pl" width="200" height="200" /> <s:TextArea id="ta" width="300" height="200" />
6、图像复制
[Bindable] private var acImage:ArrayCollection = new ArrayCollection(); protected function btn_clickHandler(event:MouseEvent):void { var bd:BitmapData = new BitmapData(img1.width, img1.height); bd.draw(img1); var bm:Bitmap = new Bitmap(bd); acImage.addItem({image:bm}); } <mx:Image id="img1" source="{img}" /> <mx:Button id="btn" label="copy image" click="btn_clickHandler(event)" /> <mx:Repeater id="repeat" dataProvider="{acImage}"> <mx:Image source="{repeat.currentItem.image}" /> </mx:Repeater>
7、图片的截取
图像的截取用途很广泛,例如需要自定义用户头像的功能,因为用户上传的图像大小不一,可以设置一个尺寸固定的矩形,允许用户拖动矩形来截取自己上传的图片。
protected function btn_clickHandler(event:MouseEvent):void { var bd:BitmapData = new BitmapData(img1.width, img1.height); bd.draw(img1); var rect:Rectangle = new Rectangle(0,0,100,100); var bd1:BitmapData = new BitmapData(rect.width, rect.height); var point:Point = new Point(0,0); bd1.copyPixels(bd,rect,point,null,null,false); var bm:Bitmap = new Bitmap(bd1); img2.load(bm); } <s:Image id="img1" source="{img}" /> <s:Button id="btn" label="cut image" click="btn_clickHandler(event)" /> <mx:Image id="img2" />使用copyPixels方法复制原始图像的一部分来实现截取,主要设置前三个参数:原始图像数据、复制区域大小、复制的起始点。
发表评论
-
清除flash player缓存-SharedObject
2012-06-18 14:02 2191http://www.macromedia.com/suppo ... -
Flash Builder4.6破解
2012-06-10 13:41 5具体步骤如下:1.到Adobe官网下载FlashBuilder ... -
SharedObject
2012-04-11 16:05 1627共享对象可以简单理解为类似浏览器的cookies,可以将一定 ... -
RollOver和MouseOver的区别
2012-03-20 10:22 1716共同点:都是针对鼠标的进入和进出事件。 不同点: 1、 ... -
wmode参数详解,对flash以及html元素的影响(转载)
2012-03-08 14:16 3645在页面中经常会用到需 ... -
Flex自定义事件时为什么要重载clone()方法(转载)
2012-02-19 17:35 1417声明:转载 以前在学习自定义事件的时候一直不太明白为什 ... -
Datagrid动态添加列
2012-02-19 17:34 1924Datagrid的列是一个数组,动态添加列的方法是创建一个新的 ... -
一个简单的画板
2012-02-17 11:22 1430Flex中画图,有两种方法: 1、直接在canvas中画 ... -
给特效加上缓动效果
2012-02-17 11:21 1021给特效的结束前加上缓动效果,比如模拟篮球落地->弹起-& ... -
TitleWindow自定义标题栏
2012-02-17 11:21 1640应用场景: TitleWindow宽度固定,titl ... -
Image拉伸
2012-02-17 11:21 1347应用场景: 当使用Image加载图片或swf文件时, ... -
TextArea设置文本的局部样式
2012-02-16 13:21 3436var tr:TextRange = new TextR ... -
HtmlText中加入超链接
2012-02-16 13:20 1263以下是Label中加入超链接的例子: prote ... -
Flex滤镜
2012-02-16 13:20 1799使用滤镜可以改变文本和控件显示效果,Flex滤镜如下: ... -
Flex字体
2012-02-16 13:20 17651、嵌入字体 嵌入字体会把字体文件编译到应用中,所以 ... -
Flex的Combobox组件
2012-02-16 13:19 85701、显示提示 设置Prompt ... -
Flex中ToolTip的使用
2012-02-15 10:12 27051、为ToolTip加入动画效 ... -
Flex常用特效
2012-02-15 10:12 1059Flex常用特效列表: -
Flex回调函数
2012-02-15 10:12 1226应用场景:父子窗体之间的通信,比如想把弹出窗口中的数据传给弹出 ... -
Flex内存优化(转载)
2012-02-15 10:12 14711. 使用合适的显示对象,对于非交互的简单形状用Sha ...
相关推荐
BitmapData是ActionScript 3(AS3)中的一个核心类,它是处理像素数据的主要工具,广泛应用于游戏开发、图像处理和动画制作等场景。在AS3中,BitmapData类允许我们创建、读取、修改和操作位图数据,这些位图数据可以...
BitmapData.draw方法是ActionScript 3.0中的一个重要功能,主要用在Adobe Flash环境中处理位图数据。这个方法允许开发者将一个显示对象(如Sprite、MovieClip或Bitmap)的可视内容复制到BitmapData对象上,从而实现...
bitmapData.applyFilter(bitmapData, new Rectangle(0, 0, bitmapData.width, bitmapData.height), new Point(), filter); ``` 6. 图像合并与混合模式 利用`merge()`方法,可以将两个BitmapData对象合并,同时可以...
在C#中,`BitmapData`类是用于高效地访问和操作位图图像像素的核心类。这个类在处理大量像素操作时尤其有用,因为它允许直接访问图像数据的内存缓冲区,而无需通过昂贵的属性访问。`BitmapData`提供了一种优化的方法...
BitmapData.pas 和 kbKernel.pas 这两个文件在IT领域中主要涉及到图像处理和自动化操作,特别是游戏或图形应用中的找图找色功能。在本文中,我们将深入探讨这两个关键概念及其在实际编程中的应用。 首先,...
delphi 找图找色 BitmapData.pas 使用方法请到原作者yeye55的blog查看, http://yeye55blog.blog.163.com/blog/static/19724102120111043252016/
BitmapData.zip 文件是一个包含 Delphi 开发中使用的 BitmapData 单元的压缩包。这个单元主要是为了实现图像处理和颜色查找功能,对于 Delphi 开发者来说,它提供了一个高效且方便的工具来搜索和操作图像数据。让...
as2.0 模拟火焰 import flash.display.*...var blueSpot: BitmapData = new BitmapData( clipBounds.xMax, clipBounds.yMax, true, 0 ) blueSpot.draw( blueSpotClip, new Matrix() ) blueSpotClip.removeMovieClip()
BitmapData是ActionScript 3(AS3)中的一个核心类,它是Adobe Flash Professional和Flex开发中的重要组成部分。这篇心得分享了关于使用BitmapData的一些高级技巧,以及如何利用它来提升图形绘制的效率和效果。...
这个压缩包"Flex RIA AS3网页游戏 BitmapData CopyPixel用法.rar"显然包含了关于如何在AS3中使用BitmapData的CopyPixel方法来创建或修改位图的示例和教程。 BitmapData对象是AS3中表示位图图像的数据结构,它可以...
BitmapData是SWT库中一个关键的类,它用于处理位图数据,允许开发者直接操作图像的像素。在这个主题中,我们将深入探讨BitmapData以及如何与自定义的Image工具类配合使用。 BitmapData类提供了对图像数据的低级别...
王者找图对比程序,delphi制作,设定一个图,找另一个图上是否有这个图!
EaselJS的位图数据EaselJS的BitmapData将AS3(例如BitmapData)添加到EaselJS。例1 // create BitmapData by HTMLImageElement_bmd01 = new createjs.BitmapData(HTMLImageElement);_bitmap01 = new createjs.Bitmap...
BitmapData类实例 运用噪声制作一些好的效果 源码
BitmapData bitmapData = bitmap.LockBits(rect, ImageLockMode.ReadOnly, bitmap.PixelFormat); int stride = bitmapData.Stride; byte[] pixels = new byte[bitmapData.Stride * bitmap.Height]; Marshal.Copy...
System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmap.PixelFormat); IntPtr ptr = bmpData.Scan0; int bytes = curBitmap.Width ...
CreateJS 的 BitmapData 的 TypeScript 定义。 这是一个定义文件,用于将 BitmapData 类用于 CreateJS 和 TypeScript。 如何使用 是定义文件体。 请从 TypeScript 程序中读取并使用它。 请注意,单独使用此文件是...
本文主要通过彩色图象灰度化来介绍C#处理数字图像的3种方法,Bitmap类、BitmapData类和Graphics类是C#处理图像的的3个重要的类。 Bitmap只要用于处理由像素数据定义的图像的对象,主要方法和属性如下: ...
var bitmapData:BitmapData = img.bitmapData; var originalRatio:Number = bitmapData.width / bitmapData.height; // 自定义切割的宽高比例 var cutRatio:Number = 4 / 3; // 例如,4:3比例 var cutWidth:...
var bitmapData:BitmapData = new BitmapData(displayObject.width, displayObject.height, false, 0); bitmapData.draw(displayObject); ``` 2. **位图数据比较**:有了BitmapData对象后,我们可以使用`hitTest()`...