¿Cómo dibujar un mapa de bits a otro, pero en un cuadrilátero dado (no necesariamente un rectángulo)?

Supongamos que tengo 2 mapas de bits. Uno es smallBitmap y otro es largeBitmap.

Quiero dibujar todo el smallBitmap en largeBitmap, pero solo en una parte de largeBitmap, y no en un rectángulo recto, sino en uncuadrilátero en lugar.

Creo que un boceto describirá mejor lo que quiero decir:

Un ejemplo de este escenario es una imagen inclinada de un teléfono inteligente (comoesta oesta), que necesita poner una captura de pantalla en su pantalla.

La entrada es: smallBitmap, largeBitmap, coordenadas "cuadrilátero" del largeBitmap (dónde colocar el smallBitmap).

El "cuadrilátero" del mapa de bits grande solo tiene 4 coordenadas y no es necesario un rectángulo. Podría ser un paralelogramo o un trapecio, por ejemplo.

Necesito escalar el mapa de bits pequeño en el cuadrilátero dentro del mapa de bits grande, y también admitir la escala de recorte central, para que no se distorsione

También necesito saber cómo tratar los textos de la misma manera, pero supongo que se trata de la misma solución.

Aquí hay algo que he intentado, pero ni siquiera 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());

Respuestas a la pregunta(3)

Su respuesta a la pregunta