4

我有一个带有蒙版位图的容器。这个容器的缩放和旋转在运行时会发生变化,我需要绘制蒙版位图,但无法计算出适当的矩阵计算来这样做。

我的代码可以正常工作以反映位置、比例、偏移,以便在不旋转的情况下进行居中。旋转时,角度正确但定位不正确-我相信是因为旋转矩形时尺寸会发生变化。

有人可以帮我弄清楚如何在定位中弥补这一点 - 这是一些代码:

 // Adjust the transformation matrix to account for the position of the container
        var tMatrix:Matrix = _imgContainer.transform.matrix;

        //Offset for container
        tMatrix.translate(this.x,this.y);

        //Offset for bounds centering
        tMatrix.translate(-_imgContainer.width/2,-_imgContainer.height/2);   

       // Compensate for rotation
       // ????

   var result_bitmap:BitmapData = new BitmapData(_maskedImg.width,_maskedImg.height,true,0x00FFFFFF);
   result_bitmap.lock();
   result_bitmap.draw(_maskedImg,tMatrix,null,null,null,true);
   result_bitmap.unlock();

提前感谢您提供的任何帮助 -

b

编辑: 对不起,如果我没有正确解释这一点,让我再试一次以支持图像。我在一个容器中有一个蒙版位图,我将其用作绘制新位图的源。在捕获之前,用户可以在运行时缩放/旋转该容器。为了实现这一点,我将基于容器矩阵的变换矩阵传递给 draw 方法,并调整 tx 和 ty 值以考虑非零原点(由于居中)。到目前为止,它运行良好并符合我的预期。

然而 - 一旦这个容器被旋转,捕获的位置现在再次关闭 - 可能是由于尺寸变化,因此 tx/ty 偏移现在对于容器的新尺寸不正确。我只需要对此进行补偿,但无法弄清楚如何。

有没有人有转换矩阵的经验可以提供帮助?再次感谢您的努力!

由 imgur.com 主办

由 imgur.com 主办

4

4 回答 4

1

仅供可能遇到类似问题的任何人使用。我通过显式设置转换矩阵值并以这个特定的顺序缩放、旋转然后平移来解决我的问题。

这不是从容器中复制转换矩阵。所以而不是

var tMatrix:Matrix = _imgContainer.transform.matrix;

我按以下顺序直接设置值:

tMatrix.scale (_imgContainer.scaleX, _imgContainer.scaleY);
tMatrix.rotate (_imgContainer.rotation * (Math.PI/180));
tMatrix.translate (_imgContainer.x, _imgContainer.y);

感谢您的努力-

b

于 2010-01-29T22:17:54.123 回答
0

如果位图包含在容器内,则应用于容器的任何转换也应应用于其中包含的事物。

我不会对位图应用任何转换,我只会将它们应用于容器。

于 2010-01-28T00:23:24.993 回答
0

我不确定我是否完全理解了您的问题,但是如果您将 100x200 对象旋转 90 度,那么宽度和高度将为 200x100,这毫无价值。

有很多方法可以解决这个问题,但我通常使用 scaleX/scaleY,因为它们不受旋转的影响,并将它们与剪辑的原始宽度/高度相乘。

于 2010-01-28T08:35:30.103 回答
0

我也没有 100% 掌握你想要做什么,但我得到的基本问题是你应用的旋转正在改变你在应用变换矩阵时需要使用的 tx/ty。

在此基础上,这可能会有所帮助:http ://www.senocular.com/flash/tutorials/transformmatrix/查看“操作变换矩阵”部分,特别是关于使用 deltaTransformPoint 忽略翻译值的部分。它是 AS2,但希望这些原则能让你走上正轨。

于 2010-01-29T10:08:31.983 回答