Como desenhar um bitmap para outro, mas em um determinado quadrilátero (não é necessário um retângulo)?

Suponha que eu tenha 2 bitmaps. Um é smallBitmap e o outro é largeBitmap.

Quero desenhar o smallBitmap inteiro em largeBitmap, mas apenas para uma parte do largeBitmap, e não em um emaranhado reto, mas em umquadrilátero em vez de.

Acho que um esboço descreve melhor o que quero dizer:

Um exemplo desse cenário é uma imagem inclinada de smartphone (comoesta ouesta), é necessário colocar uma captura de tela em sua tela.

A entrada é: smallBitmap, largeBitmap, coordenadas "quadrilaterais" do largeBitmap (onde colocar o smallBitmap).

O "quadrilátero" do largeBitmap possui apenas 4 coordenadas e não é necessário um retângulo. Pode ser um paralelogramo ou trapézio, por exemplo.

Preciso dimensionar o smallBitmap no quadrilátero dentro do largeBitmap e também oferecer suporte à escala de corte central, para que não fique distorcida

Também preciso saber como tratar os textos da mesma maneira, mas acho que é sobre a mesma solução.

Aqui está uma coisa que eu tentei, mas ela nem escala:

    //mBigBitmap: size is 720x1280
    //mSmallBitmap: size is 720x720
    mLeftTop = new Point(370, 358);
    mRightTop = new Point(650, 384);
    mLeftBot = new Point(375, 972);
    mRightBot = new Point(660, 942);
    Canvas canvas = new Canvas(mBigBitmap);
    final Matrix matrix = new Matrix();
    matrix.setPolyToPoly(new float[]{0, 0,
                    mBigBitmap.getWidth() - 1, 0,
                    0, mBigBitmap.getHeight() - 1,
                    mBigBitmap.getWidth() - 1, mBigBitmap.getHeight() - 1},
            0,
            new float[]{mLeftTop.x, mLeftTop.y,
                    mRightTop.x, mRightTop.y,
                    mLeftBot.x, mLeftBot.y,
                    mRightBot.x, mRightBot.y
            }
            , 0, 4);
    canvas.drawBitmap(mSmallBitmap, matrix, new Paint());

questionAnswers(3)

yourAnswerToTheQuestion