ActionScript - getPixel()使用转换矩阵在BitmapData上进行协调?

时间:2011-03-24 19:22:25

标签: actionscript-3 matrix bitmap pixel transformation

我用位图资产的位图数据填充了圆形。

我需要从中心旋转圆圈,所以我将位图添加到圆的中心并使用矩阵变换向上和向左移动位图数据,使其显示为居中。

现在我正在尝试用getPixel()读取位图数据,但是返回值是关闭的,因为它返回位图数据的未转换位置而不是可见的转换位图数据。

Bitmap(Sprite(evt.currentTarget).getChildAt(0)).bitmapData.getPixel(evt.localX, evt.localY)

如何通过矩阵变换从位图中精确读取像素数据?


使用代码更新。假设我的示例中的redCircleData更加丰富多彩,值得检索像素数据。

var redCircleData:Sprite = new Sprite();
redCircleData.graphics.beginFill(0xFF0000, 1.0);
redCircleData.graphics.drawCircle(0, 0, 100);
redCircleData.graphics.endFill();

var matrix:Matrix = new Matrix();
matrix.tx = redCircleData.width / 2;
matrix.ty = redCircleData.height / 2;

var myBitmapData:BitmapData = new BitmapData(redCircleData.width, redCircleData.height, true, 0x00FFFFFF);
myBitmapData.draw(redCircleData, matrix);

var theBitmap:Bitmap = new Bitmap(myBitmapData, PixelSnapping.AUTO, true);
theBitmap.x -= matrix.tx;
theBitmap.y -= matrix.ty;

addChild(theBitmap);

2 个答案:

答案 0 :(得分:1)

Matrix类为您提供了一些非常方便的功能来处理您的问题:

Matrix.invert();

Matrix.transformPoint();

获取矩阵的逆矩阵(反转它的副本),然后用它转换你的Point(e.localX,e.localY)。使用变换后的点坐标作为getPixel()的参数。 BitmapData只是内存中RGB或RGBA像素的块,其中(0,0)是左上角。您需要通过用于显示它的变换向后工作,以查找鼠标下位图的像素。这就是倒置矩阵为你所做的。

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/geom/Matrix.html

答案 1 :(得分:0)

我不确定你尝试做的事情是否可行(我至少没有尝试过,而且我的印象是你无法真正将转换应用于{{1对象,但我可能错了)。但是,您可以创建一个新的BitmapData,其中包含您感兴趣的区域的快照,并从此新对象中读取像素。这样你就可以轻松实现你想要的目标。