gpt4 book ai didi

actionscript-3 - 基于矩阵计算新的 BitmapData 的大小

转载 作者:行者123 更新时间:2023-12-04 06:53:05 29 4
gpt4 key购买 nike

我正在尝试将 BitmapData 的内容绘制到另一个尚未创建的内容中。
但在绘制之前,我需要缩放和旋转图像,然后绘制它。
我的问题是我不知道转换后 BitmapData 的大小,所以我无法创建新的来绘制它。

这个方法显示了我的意思:

public function getTransformedBitmapData(origin:BitmapData):BitmapData
{
var matrix:Matrix = new Matrix();

// ajusting the anchor point and rotating
matrix.translate(-origin.width / 2, -origin.height / 2);
matrix.rotate(Math.PI / 4); // 45 deg
matrix.translate(origin.width / 2, origin.height / 2);

// scaling
matrix.scale(1.5, 1.5);

// Calculating the size of the new BitmapData
var width:Number = 0; // I don't know this value!
var height:Number = 0; // I don't know this value!

// Creating and drawing (with transformation)
var result:BitmapData = new BitmapData(width, height, true, 0);
result.draw(origin, matrix);

return result;
}

有人知道我应该怎么做才能找出(计算)转换后该图像的大小?

这张图片说明了旋转的 Action ,以及我想了解的内容:

enter image description here

最佳答案

好的,使用@ansiart 答案作为起点,我设法以这种方式计算尺寸:

public function getTransformedBitmapData(origin:BitmapData):BitmapData
{
var matrix:Matrix = new Matrix();

// ajusting the anchor point and rotating
matrix.translate(-origin.width / 2, -origin.height / 2);
matrix.rotate(Math.PI / 4); // 45 deg
matrix.translate(origin.width / 2, origin.height / 2);

// scaling
matrix.scale(1.5, 1.5);

// Finding the four corners of the bounfing box after transformation
var topLeft:Point = matrix.transformPoint(new Point(0, 0));
var topRight:Point = matrix.transformPoint(new Point(origin.width, 0));
var bottomLeft:Point = matrix.transformPoint(new Point(0, origin.height));
var bottomRight:Point = matrix.transformPoint(new Point(origin.width, origin.height));

// Calculating "who" is "where"
var top:Number = Math.min(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y);
var bottom:Number = Math.max(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y);
var left:Number = Math.min(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x);
var right:Number = Math.max(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x);

// Ajusting final position
matrix.translate(-left, -top);

// Calculating the size of the new BitmapData
var width:Number = right - left;
var height:Number = bottom - top;

// Creating and drawing (with transformation)
var result:BitmapData = new BitmapData(width, height, false, 0);
result.draw(origin, matrix);

return result;
}

我认为这可能有点矫枉过正,但确实有效。

关于actionscript-3 - 基于矩阵计算新的 BitmapData 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11481197/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com