- 浏览: 131966 次
- 性别:
- 来自: 苏州
最新评论
-
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 2132http://www.macromedia.com/suppo ... -
Flash Builder4.6破解
2012-06-10 13:41 5具体步骤如下:1.到Adobe官网下载FlashBuilder ... -
SharedObject
2012-04-11 16:05 1586共享对象可以简单理解为类似浏览器的cookies,可以将一定 ... -
RollOver和MouseOver的区别
2012-03-20 10:22 1661共同点:都是针对鼠标的进入和进出事件。 不同点: 1、 ... -
wmode参数详解,对flash以及html元素的影响(转载)
2012-03-08 14:16 3554在页面中经常会用到需 ... -
Flex自定义事件时为什么要重载clone()方法(转载)
2012-02-19 17:35 1368声明:转载 以前在学习自定义事件的时候一直不太明白为什 ... -
Datagrid动态添加列
2012-02-19 17:34 1872Datagrid的列是一个数组,动态添加列的方法是创建一个新的 ... -
一个简单的画板
2012-02-17 11:22 1382Flex中画图,有两种方法: 1、直接在canvas中画 ... -
给特效加上缓动效果
2012-02-17 11:21 991给特效的结束前加上缓动效果,比如模拟篮球落地->弹起-& ... -
TitleWindow自定义标题栏
2012-02-17 11:21 1585应用场景: TitleWindow宽度固定,titl ... -
Image拉伸
2012-02-17 11:21 1238应用场景: 当使用Image加载图片或swf文件时, ... -
TextArea设置文本的局部样式
2012-02-16 13:21 3327var tr:TextRange = new TextR ... -
HtmlText中加入超链接
2012-02-16 13:20 1197以下是Label中加入超链接的例子: prote ... -
Flex滤镜
2012-02-16 13:20 1741使用滤镜可以改变文本和控件显示效果,Flex滤镜如下: ... -
Flex字体
2012-02-16 13:20 16681、嵌入字体 嵌入字体会把字体文件编译到应用中,所以 ... -
Flex的Combobox组件
2012-02-16 13:19 84931、显示提示 设置Prompt ... -
Flex中ToolTip的使用
2012-02-15 10:12 26501、为ToolTip加入动画效 ... -
Flex常用特效
2012-02-15 10:12 1025Flex常用特效列表: -
Flex回调函数
2012-02-15 10:12 1176应用场景:父子窗体之间的通信,比如想把弹出窗口中的数据传给弹出 ... -
Flex内存优化(转载)
2012-02-15 10:12 14111. 使用合适的显示对象,对于非交互的简单形状用Sha ...
相关推荐
最近要转开发平台,正研究C#。C#好是好,不过处理图片时一个像素一个像素的操作像素不是一般的慢。其实Delphi也一样,但好在Delphi的Bitmap类提供了ScanLines,可以一行一...经过一番搜索,终于发现了C# BitmapData类。
delphi 找图找色 BitmapData.pas 使用方法请到原作者yeye55的blog查看, http://yeye55blog.blog.163.com/blog/static/19724102120111043252016/
ActionScript 3 BitmapData 的例子 有助于你了解ActionScript 3位图!
位图数据处理,主要用于位图的找图找色:BitmapData.pas 實現按键精靈的功能:kbKernel.pas
NULL 博文链接:https://as3.iteye.com/blog/964080
as2.0 模拟火焰 import flash.display.*...var blueSpot: BitmapData = new BitmapData( clipBounds.xMax, clipBounds.yMax, true, 0 ) blueSpot.draw( blueSpotClip, new Matrix() ) blueSpotClip.removeMovieClip()
想把 draw方法弄明白
王者找图对比程序,delphi制作,设定一个图,找另一个图上是否有这个图!
EaselJS的位图数据EaselJS的BitmapData将AS3(例如BitmapData)添加到EaselJS。例1 // create BitmapData by HTMLImageElement_bmd01 = new createjs.BitmapData(HTMLImageElement);_bitmap01 = new createjs.Bitmap...
BitmapData类实例 运用噪声制作一些好的效果 源码
Flex RIA AS3网页游戏 BitmapData CopyPixel用法.rar
一个delphi下用于快速找图找色的单元,很好用!!! 原下载地址已经全部失效,在这里分享给大家,希望使用delphi的朋友能够喜欢。
NULL 博文链接:https://1299020954.iteye.com/blog/2148197
NULL 博文链接:https://as3.iteye.com/blog/909389
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只要用于处理由像素数据定义的图像的对象,主要方法和属性如下: ...
使用强大的BitmapData类处理图像,图像的每一个通道和每一点像素; 使用新的Pixel Bender技术来创建用于位图滤镜的ActionScript着色器、混合模式和填充模式; 在图像、文本和视频上应用动态的、可复用的效果,同时...
private var _defData:BitmapData; private var _expandFilter:ConvolutionFilter; private var _filter:DisplacementMapFilter; private var _drawRect:Rectangle; private var _scaleInv:Number; private ...
将Bitmap转成byte[],进行保存,用到时再取出byte[],转化成Bitmap,进行显示