如何在Android中获取图像矩阵坐标?

6
我正在开发一个包含裁剪功能的应用程序,在这个过程中,我遇到了以下问题:
当我们对图像进行矫正时,裁剪覆盖层没有围绕整个图像循环,如果我们改变裁剪覆盖层,比例也不起作用。
我从谷歌获取了代码,但它与矩阵有关。我尝试使用矩阵,但这里我需要找到矩阵的坐标(边缘)以移动覆盖层。
如何找到它?如果有人有任何想法,请帮助我...
我添加了一张图片来解释这个问题:enter image description here 谢谢提前帮助..
我正在使用下面的代码,但我没有得到矩阵的确切坐标。
RectF r = new RectF(); 
 mymatrix.mapRect(r);
 Rect rect = 
 new Rect((int)r.left,int)r.top,int)r.right+width,int)r.bottom+height);

如果您正在矩阵上应用旋转,则不应使用mapRect。我的建议是找出代表每个矩形边缘(图像本身)的4个初始点,然后改用mapPoints - tato.rodrigo
谢谢您的回复,有示例代码吗? - Ashok
1个回答

7

如果您在矩阵上应用旋转,则不应使用 mapRect。我的建议是找出代表每个矩形边缘(图像本身)的4个初始点,然后改用mapPoints

假设您有一张图像,宽度为200像素,高度为200像素,其左上角位于原点(0,0)。

如果您将此图像从中心点(100,100)旋转45度,然后从中心点将其缩放200%,则会出现以下情况:

    //original image coords
    float[] points = {
            0f, 0f, //left, top
            200f, 0f, //right, top
            200f, 200f, //right, bottom
            0f, 200f//left, bottom
    };

    Matrix matrix = new Matrix();
    //rotate 45 degrees from image center
    matrix.postRotate(45f, 100f, 100f);
    //scale 200% from center
    matrix.postScale(2f, 2f, 100f, 100f);

    //get the new edges coords
    matrix.mapPoints(points);

在调用matrix.mapPoints(points)之后,points数组将具有更新的坐标。这意味着points[0],points[1]将具有新的左上图像坐标等等。
偶数索引表示点的横坐标,奇数索引表示点的纵坐标在points数组中。

谢谢回复,如何将点转换为矩形值?因为我想将边界固定到叠加层上,以便在整个矩阵位图上移动。 - Ashok
你必须记住,Rect类本身不能代表你发布的图像上的蓝色矩形。话虽如此,你所说的“修复边界以将覆盖层移动到整个矩阵位图中”是什么意思?我无法正确理解。 - tato.rodrigo
抱歉,我想要将覆盖层移动到整个矩阵(蓝色边框)中。 - Ashok
你尝试过上面的代码了吗?如果在调用mapPoints后使用绘图原语来绘制点,可能会有所帮助。你询问了图像坐标,这就是代码所做的。除此之外,我恐怕无法再帮助你了,因为我还没有理解“在整个矩阵(蓝色边框)中移动叠加层”的部分。 - tato.rodrigo
我认为覆盖层就是位图内的矩形(黄色边框),他想要在整个图像中移动,阿肖克,这样对吗? - user512

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接