Как объединить два растровых изображения в 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
Я должен добавить, что оба изображения имеют мультитач-прослушиватель, который позволяет масштабировать и переводить первое изображение, а второе-масштабировать, переводить и поворачивать.