BitmapData类
BitmapData对象指定了位图的属性
1. Height属性:被锁定位图的高度.
2. Width属性:被锁定位图的高度.
3. 盗张图,连接写在文章底部
先看看BitmapData的应用,我的场景是,我有一个一维像素点阵数组,里面放的是每个像素点的灰度值,知道宽和高,要转换成bitmap
1 ///
JamesLi的文章:http://www.adobe.com/cn/devnet/actionscript/articles/silkflash-as.html 总结一下绚丽效果的核心: 1、利用一个Bitmapdata 3、利用bitmapdata.draw,把曲线不断绘制,并利用ColorTransform做一定的颜色和透明度变化。
1、Localconnection Flash之间传递数据,自然想到Localconnection等多种办法。 但在实践中,如果要传一个图片这样的数据,就没这么简单了。 首先,localconnection一次send只能传递40k的数据,而且是它AMF编码后的,也就是说,自己最多也只能有30+K的余地。 针对这个限制,首先,我们想到拆分N份来发。 var size:int = 30*1024; var count:int = a.length / size + 1; var localCo
bitmapData; dstBmp.LockBits(&rect , Gdiplus::ImageLockModeRead, dstBmp.GetPixelFormat(), &bitmapData ); memcpy(pBmpBits, (unsigned char*)bitmapData.Scan0, nCW * nCH * 4); dstBmp.UnlockBits(&bitmapData 1.通过GetBitmapBits()函数获取到HBITMAP的ARGB数据,然后通过 Gdiplus::BitmapData bitmapData; Gdiplus::Bitmap dstBmp(nCW , nCH); dstBmp.LockBits(&rect , Gdiplus::ImageLockModeWrite, Gdiplus::PixelFormat32bppARGB, &bitmapData ); memcpy((unsigned char*)bitmapData.Scan0, pBmpBits, nCW * nCH * 4); dstBmp.UnlockBits(&bitmapData);
地址在这里:http://www.shch8.com/blog/post/71.html 有demo可以下载(例子需要使用flash cs4+才能打开) 比较巧妙的是这一段核心代码: var bitmapData :BitmapData=new BitmapData(png_mc.width,png_mc.height,true,0x000000); bitmapData.draw(png_mc); //重绘图象到bitmapData //png_mc.graphics.beginFill(0,1); png_mc.graphics.beginBitmapFill (bitmapData); var _width:Number = bitmapData.width; var _height:Number = bitmapData.height :BitmapData = new BitmapData(mc.width, mc.height, true, 0); bitmapData.draw(imgObj
BitmapData类 BitmapData类专门用于位图处理,与Bitmap的不同点在于,它使用指针直接修改内存,而Bitmap是使用SetPixel()方法间接修改颜色,因此其效率远远超过SetPixel 的代码 private void Gray_BitmapData() { int width = bitmap.Width, height = bitmap.Height;//图片的宽度和高度 //在内存中以读写模式锁定Bitmap BitmapData bitmapData = bitmap.LockBits( new Rectangle(0, 0, width, height Marshal.Copy(srcArray, 0, ptr, size); //从内存中解锁 bitmap.UnlockBits(bitmapData); } 效率对比 代码 =" + (long)t1 + "\nTradition=" + (long)t2); } 图片信息 耗时 可以看到传统方法的耗时是使用BitmapData方法的106倍,需要整整14秒,而BitmapData
,这是可以的.但是从Flash Player方面来讲,Visible = false任然值得它去绘制,它比较笨.木有办法,那优化的方案就是,将其移出舞台了. 10,像素处理优化: 当绘制像素时,使用BitmapData object var myImage:BitmapData = new BitmapData ( wdth, hght, false ); var p_w_picpathContainer:Bitmap 在以下代码中,使用了 lock() 和 unlock() 方法来改进性能: var buffer:BitmapData = new BitmapData(200,200,true,0xFFFFFFFF) 类的 lock() 方法可以锁定图像,并防止引用该图像的对象在BitmapData 对象更改时进行更新。 例如,如果 Bitmap 对象引用BitmapData 对象,则可以锁定BitmapData 对象,对其更改后再解锁。在BitmapData 对象解锁之前, Bitmap 对象不会更改。
var BitmapData0:BitmapData = new BitmapData(550, 400, false, 0x0); var Bitmap0:Bitmap = new Bitmap(BitmapData0 enter_frame); function enter_frame(evt:Event) { for (var i:Number = 0; i<dotArr.length; i++) { BitmapData0 if ((b1 || b2) && Math.random()>0.9) { dotArr.splice(i,1); } } BitmapData0 .applyFilter(BitmapData0.clone(),BitmapData0.rect,new Point(0, 0),cf); }
As3.0中的位图(Bitmap/BitmapData)编程功能十分丰富,下面这些是官方文档上的基本示例: 1.位图使用(模糊)滤镜 //创建一个矩形区域的BitmapData var bmd:BitmapData = new BitmapData(50, 50, true, 0xFFFFAA00); var bmd2:BitmapData = new BitmapData(50, 50, true, 0xCCFFAA00 = new BitmapData(50, 50, true, 0xFF00FF99); var bmd2:BitmapData = new BitmapData(50, 50, true, 0x99AA3366 = new BitmapData(40, 40, false, 0x000000FF); var bmd2:BitmapData = new BitmapData(80, 40, false, 0x0000CC44 = new BitmapData(80, 80); var bmd2:BitmapData = new BitmapData(80, 80); var seed:int = int(Math.random
关键:先加载一张完整的图片,然后利用BitmapData的copyPixels功能,把每个小块的像素copy出来,形成一系列新的BitmapData(也就是一块块小图片),然后再利用TweenLite让其依次 代码: package { import flash.display.Sprite; import flash.display.BitmapData; import flash.geom.Rectangle gs.TweenLite; import gs.easing.Back; public class ImageUp extends Sprite { var _originalImageData:BitmapData = 0,j:uint = 0; for (i=0; i<_rows; i++) { for (j=0; j<_cols; j++) { var _imgCell:BitmapData = new BitmapData(_w,_h); //关键:从原图中复制相应的小区域像素到imgCell中 _imgCell.copyPixels(_originalImageData
在点击“加水印”的按钮时,建立两个BitmapData,然后里面分别存放图片和需要添加的文字,之后将两个BitmapData转换为Bitmap添加至舞台,再转成一张新的Bitmap。 :BitmapData = (previewImg.source as Bitmap).bitmapData.clone(); 136: 137 : var imgByteArray:ByteArray = pngenc.encode(bitmapData); 138: :BitmapData = new BitmapData(loader.width, loader.height, true, 0x00FFFFFF); 152: var bitmap:Bitmap = new Bitmap(); 156: bitmap.bitmapData = bitmapData; 157
:BitmapData = new BitmapData(_loader.width, _loader.height, true, 0); bitmapData.draw :BitmapData = new BitmapData(_loader.width, _loader.height, true, 0); bitmapData.draw :BitmapData = new BitmapData(320,455,true,0); bitmapData.draw(photoEditContainer, _matrix = new BitmapData(320,455,true,0); bitmapData.draw(tempCan,_matrix); tempCan.rawChildren.removeChild(bt); bitmapData.dispose(); bitmapData = null
package 2: { 3: import flash.display.Bitmap; 4: import flash.display.BitmapData 47: var bmp:Bitmap = new Bitmap(); 48: var bmpData:BitmapData = new BitmapData(textField.width, textField.height, true, 0x00000000); 49: bmpData.draw (textField); 50: 51: bmp.bitmapData = bmpData; 52: var bmp:Bitmap = param_1.getChildAt(0) as Bitmap; 95: bmp.bitmapData.dispose
; trace(MyFlower + '--' + ApplicationDomain.currentDomain.hasDefinition('MyFlower')); var bmpData:BitmapData = new MyFlower(359, 629); var bmp:Bitmap = new Bitmap(); bmp.bitmapData = bmpData; bmp.x = 0; bmp.y import flash.system.ApplicationDomain; import flash.system.LoaderContext; import flash.display.BitmapData + ApplicationDomain.currentDomain.hasDefinition('MyFlower')); var bmpData:BitmapData = new MyFlower(359, 629); var bmp:Bitmap = new Bitmap(); bmp.bitmapData = bmpData
这里以《神仙道》中某一人物资源为例子,它的每一个动作都经过了处理,以中心点为基准点(这样就不需要程序来控制偏移量了,否则程序要改变bitmapData时还需要改变bitmap的坐标)。 ? 2、分解动作 parseBitmapData(bmpData, 95, 118); private function parseBitmapData(bmpData:BitmapData, w:Number rectangle.height = h; var actionCount:int = 20; while (actionCount--) { var bmd:BitmapData = new BitmapData(rectangle.width, rectangle.height, true, 0); bmd.copyPixels(bmpData, rectangle actionIdx >= _actionList.length) { _actionIdx = 0; } _bmd.bitmapData
} 接下来是如何运用: var sW:Number=stage.stageWidth;//舞台宽度 var sH:Number=stage.stageHeight;//舞台高度 var canvas:BitmapData =new BitmapData(sW,sH,false,0xff000000);//默认生成一个黑背景的BitmapData var rect:Rectangle=canvas.rect;//canvas b.original_radius) { b.y=b.original_radius; b.vy*=-1; } } canvas.dispose(); canvas = new BitmapData =new BitmapData(300,300,false,0); private const blur:BlurFilter=new BlurFilter(10,10,1); private =new BitmapData(sW,sH,false,0x00000000); var bitmap:Bitmap; var i:uint=0; var rect:Rectangle=new Rectangle
g.DrawString(cur_time_str.c_str(), -1, &font, Gdiplus::PointF(r_left, r_top), &solid_brush); Gdiplus::BitmapData , &locked_bitmapData)) { auto buffer_size = locked_bitmapData.Stride * locked_bitmapData.Height; , locked_bitmapData.Height); logo_image->stride_ = locked_bitmapData.Stride; memcpy(buffer.get (), locked_bitmapData.Scan0, buffer_size); logo_image->data_.swap(buffer); } bitmap.UnlockBits (&locked_bitmapData); } return logo_image; } Windows平台RTMP播放器、RTSP播放器C# demo Windows平台C#的demo,添加了
最大类间方差: image.png 固定阀值: image.png public function getThresholdGrayValue(bitmapData:BitmapData): // 阈值 var step:int = 1; //生成直方图 for (var i:int = 0; i < bitmapData.width ; i++) { for (var j:int = 0; j < bitmapData.height; j++) { //返回各个点的颜色,以RGB表示 var color:uint = bitmapData.getPixel(i,j);
来对视频截图 3、在截图上,放一个方块允许用户手动调整位置,同时允许截图做缩放 4、用户调整完成后,对指定区域的BitmapData做copyPixes处理(即拷贝指定区域的像素) 5、将上一步得到的新 _video.height); } } function btnGet_Click(e:MouseEvent):void { var bmd:BitmapData = new BitmapData _bmp.bitmapData = bmd; } this._btnSave.enabled = true; this. _mask.height * ratio; //trace(ratio); var bmd:BitmapData = new BitmapData(imgWidth,imgHeight,false _bmp.bitmapData,new Rectangle((this._mask.x-260)*ratio,(this.
void *bitmapData; //内存空间的指针,该内存空间的大小等于图像使用RGB通道所占用的字节数。 计算整张图占用的字节数 colorSpace = CGColorSpaceCreateDeviceRGB();//创建依赖于设备的RGB通道 //分配足够容纳图片字节数的内存空间 bitmapData //创建CoreGraphic的图形上下文,该上下文描述了bitmaData指向的内存空间需要绘制的图像的一些绘制参数 context = CGBitmapContextCreate (bitmapData CreateRGBABitmapContext(img); CGRect rect = {{0,0},{size.width, size.height}}; //将目标图像绘制到指定的上下文,实际为上下文内的bitmapData