Flex中的透视图像转换

时间:2013-06-04 14:07:04

标签: actionscript-3 flex

进行这种转换的最佳方法是:我有4对坐标,我需要将图像的角落准确地放在它们身上? 就像在photoshop中一样,当你处于自由变换模式并且在按住ctrl的同时移动图像的角落。 enter image description here

类似的东西。

3 个答案:

答案 0 :(得分:2)

您可以使用graphics.drawTriangles。 http://help.adobe.com/en_US/as3/dev/WS84753F1C-5ABE-40b1-A2E4-07D7349976C4.html

此代码应该满足您的需求(未经测试)

graphics.beginBitmapFill(bitmapData);
graphics.drawTriangles( 
   Vector.<Number>([10,10, 100,10, 10,100, 100,100]), 
   Vector.<int>([0,1,2, 1,3,2]),
   Vector.<Number>([0,0, 1,0, 0,1, 1,1])
); 

答案 1 :(得分:2)

如果您可以使用Flash 10 drawTriangles()方法,那么this link将为您提供有关您尝试执行的操作的详细说明,以及一些记录良好的功能代码。该代码与romamik提供的解决方案非常相似,但是,您需要计算t的正确uvtData值才能使其正确呈现:

总结该链接:

  • 计算您要绘制的矩形的中心点
  • 获取每个点与中心之间的距离
  • 计算对角线之间的比率
  • 使用公式(1/point_distance)*ratio计算每个点的透视变形 - 投影到虚拟3d空间(也就是帖子的作者称之为“魔法”)

这应该产生你正在寻找的效果。

如果您无法使用drawTriangles(),那么this link会提供替代方案,但它不会产生与drawTriangles()方法一样好的结果。

答案 2 :(得分:1)

您可以使用旧3D引擎Sandy移植的DistortImage class。更简洁的方法是使用rotateXrotateY,但需要一些数学上的痛苦!