我有一个图像(mx),我想得到点击的像素的uint.
有任何想法吗?
BitmapData LiveDoc页面上的几分钟将带您到达您需要的位置.将图像加载到Bitmap变量后,可以访问其BitmapData属性.添加鼠标单击事件侦听器到图像,然后使用BitmapData :: getPixel.getPixel的示例显示了如何将uint响应转换为rgb十六进制代码.
这是对BitmapData页面给出的示例的修改(对我有用)(使用mxmlc - YMMV):
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.net.URLRequest; public class BitmapDataExample extends Sprite { private var url:String = "santa-drunk1.jpg"; private var size:uint = 200; private var image:Bitmap; public function BitmapDataExample() { configureAssets(); } private function configureAssets():void { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); var request:URLRequest = new URLRequest(url); loader.load(request); addChild(loader); } private function completeHandler(event:Event):void { var loader:Loader = Loader(event.target.loader); this.image = Bitmap(loader.content); this.addEventListener(MouseEvent.CLICK, this.clickListener); } private function clickListener(event:MouseEvent):void { var pixelValue:uint = this.image.bitmapData.getPixel(event.localX, event.localY) trace(pixelValue.toString(16)); } } }
这是一个更简单的实现.您所做的就是使用bitmapData 的draw()方法拍摄舞台的快照,然后在鼠标下的像素上使用getPixel().这样做的好处是,您可以对绘制到舞台的任何内容进行采样,而不仅仅是给定位图.
import flash.display.Bitmap; import flash.display.BitmapData; import flash.events.*; stage.addEventListener(MouseEvent.CLICK, getColorSample); function getColorSample(e:MouseEvent):void { var bd:BitmapData = new BitmapData(stage.width, stage.height); bd.draw(stage); var b:Bitmap = new Bitmap(bd); trace(b.bitmapData.getPixel(stage.mouseX,stage.mouseX)); }
希望这有用!
编辑:
此编辑版本使用单个BitmapData
,并删除创建一个不必要的步骤Bitmap
.如果您正在对颜色进行采样,MOUSE_MOVE
那么这对于避免内存问题至关重要.
注意:如果您使用自定义光标精灵,则必须使用"状态"以外的对象,否则您将采样自定义精灵的颜色而不是其下的颜色.
import flash.display.Bitmap; import flash.display.BitmapData; import flash.events.*; private var _stageBitmap:BitmapData; stage.addEventListener(MouseEvent.CLICK, getColorSample); function getColorSample(e:MouseEvent):void { if (_stageBitmap == null) { _stageBitmap = new BitmapData(stage.width, stage.height); } _stageBitmap.draw(stage); var rgb:uint = _stageBitmap.getPixel(stage.mouseX,stage.mouseY); var red:int = (rgb >> 16 & 0xff); var green:int = (rgb >> 8 & 0xff); var blue:int = (rgb & 0xff); trace(red + "," + green + "," + blue); }
这不是特定于Flex或mx:Image,并允许您从任何位图可绘制对象中获取像素颜色值(前提是您有权限):
private const bitmapData:BitmapData = new BitmapData(1, 1); private const matrix:Matrix = new Matrix(); private const clipRect:Rectangle = new Rectangle(0, 0, 1, 1); public function getColor(drawable:IBitmapDrawable, x:Number, y:Number):uint { matrix.setTo(1, 0, 0, 1, -x, -y) bitmapData.draw(drawable, matrix, null, null, clipRect); return bitmapData.getPixel(0, 0); }
您可以轻松地从舞台或mx:Image实例中抓取一个像素.它比绘制整个舞台(或可绘制对象)更有效,并且应该足够快以连接到MouseEvent.MOUSE_MOVE以获得即时视觉反馈.