Java 在位图上使用Matrix.polytoply()时,是否有方法不拉伸位图?

Java 在位图上使用Matrix.polytoply()时,是否有方法不拉伸位图?,java,android,bitmap,Java,Android,Bitmap,我试图用给定的四边形对位图进行透视变换。但是,Matrix.polytoply函数不仅拉伸了我想要的图像部分,还拉伸了给定区域之外的像素,因此在某些边缘情况下会形成一幅巨大的图像,这会导致我的应用程序因OOM而崩溃 是否有任何方法可以将像素放置在所述区域之外而不被拉伸 或者有没有其他更方便记忆的透视变换方法 我现在是这样做的: // Perspective Transformation float[] destination = {0, 0, width, 0,

我试图用给定的四边形对位图进行透视变换。但是,
Matrix.polytoply
函数不仅拉伸了我想要的图像部分,还拉伸了给定区域之外的像素,因此在某些边缘情况下会形成一幅巨大的图像,这会导致我的应用程序因OOM而崩溃

  • 是否有任何方法可以将像素放置在所述区域之外而不被拉伸
  • 或者有没有其他更方便记忆的透视变换方法
我现在是这样做的:

// Perspective Transformation
float[] destination = {0, 0,
        width, 0,
        width, height,
        0, height};

Matrix post = new Matrix();
post.setPolyToPoly(boundingBox.toArray(), 0, destination, 0, 4);
Bitmap transformed = Bitmap.createBitmap(temp, 0, 0, cropWidth, cropHeight, post, true);

其中
cropWidth
cropHeight
是位图的大小(为了节省内存,我将其裁剪到四边形的边缘),而
temp
称为裁剪位图。

多亏了pskink我让它工作了,下面是一篇文章,里面有代码:


您可以尝试
Canvas#drawBitmapMesh
,但我不知道它在内存方面的行为(您也可以尝试
Canvas#drawVertices
,但我真的怀疑是否有人尝试过该方法:-)非常感谢!这为我解决了问题。如果有人好奇,这篇文章有所有必要的代码: