Wie zeichnet man eine Bitmap zu einer anderen, aber in ein bestimmtes Viereck (kein Rechteck erforderlich)?

Angenommen, ich habe 2 Bitmaps. Eine ist smallBitmap und eine ist largeBitmap.

Ich möchte die gesamte smallBitmap in largeBitmap zeichnen, aber nur in einen Teil von largeBitmap, und zwar nicht in einem geraden Rechteck, sondern in einVierec stattdessen

Ich denke, eine Skizze beschreibt am besten, was ich meine:

Ein Beispiel für dieses Szenario ist ein geneigtes Smartphone-Bild (wieDie oderDie), dass Sie einen Screenshot in den Bildschirm einfügen müssen.

Die Eingabe ist: smallBitmap, largeBitmap, "viereckige" Koordinaten der largeBitmap (wo die smallBitmap abgelegt werden soll).

Das "Viereck" der LargeBitmap hat nur 4 Koordinaten und es ist kein Rechteck erforderlich. Dies kann beispielsweise ein Parallelogramm oder ein Trapez sein.

Ich muss die smallBitmap in das Viereck innerhalb der largeBitmap skalieren und auch die Skalierung des mittleren Zuschnitts unterstützen, damit es nicht verzerrt wird

Ich muss auch wissen, wie man Texte auf die gleiche Weise behandelt, aber ich denke, es geht um die gleiche Lösung.

Hier ist etwas, das ich ausprobiert habe, aber es skaliert nicht einmal:

    //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());

Antworten auf die Frage(6)

Ihre Antwort auf die Frage