Member 12846241 Ответов: 0

Как объединить два растровых изображения в android


Первое растровое изображение будет заполнять весь холст. Затем я добавляю еще одно растровое изображение, которое было создано из imageview с помощью:

tattoo.buildDrawingCache();
Bitmap bit2 = tattoo.getDrawingCache();


Затем я хочу добавить это растровое изображение поверх другого, сохраняя тот же масштаб, поворот и перевод относительно другого растрового изображения. Моя проблема заключается в том, что, хотя масштаб и вращение кажутся прекрасными, перевод смещается в ту или иную сторону.

Что я уже пробовал:

public static Bitmap overlay(Bitmap bmp1, Bitmap bmp2) {

    Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
    Canvas canvas = new Canvas(bmOverlay);
    canvas.drawBitmap(bmp1, 0,0 , null);

    Matrix matrix = new Matrix();
    matrix.setScale(tattoo.getScaleX() / imageView.getScaleX(), tattoo.getScaleY() / imageView.getScaleY());

    int[] tattooCoords = getRelativeCoords(tattoo);
    int[] imageViewCoords = getRelativeCoords(imageView);
    matrix.setTranslate(tattooCoords[0] - imageViewCoords[0], tattooCoords[1] - imageViewCoords[1]);
    matrix.postRotate(tattoo.getRotation(), tattoo.getX() + tattoo.getWidth() / 2,
            tattoo.getY() + tattoo.getHeight() / 2);
    canvas.drawBitmap(bmp2, matrix, null);

    bmp1.recycle();
    bmp2.recycle();

    return bmOverlay;

}

private static int[] getRelativeCoords(View v){
    View parent = v.getRootView();
    int[] viewLocation = new int[2];
    v.getLocationInWindow(viewLocation);

    int[] rootLocation = new int[2];
    parent.getLocationInWindow(rootLocation);

    int relativeLeft = viewLocation[0] - rootLocation[0];
    int relativeTop  = viewLocation[1] - rootLocation[1];

    return new int[]{relativeLeft, relativeTop};
}

Member 12846241

Я должен добавить, что оба изображения имеют мультитач-прослушиватель, который позволяет масштабировать и переводить первое изображение, а второе-масштабировать, переводить и поворачивать.

0 Ответов