Математическая трансформация Android - PullRequest
0 голосов
/ 09 января 2012

Мне нужно объединить 2 изображения в одно.По сути, все, что мне нужно сделать, это наложить один из них поверх другого в центре изображения.Это должно работать на всех основных устройствах Android.

Я пробовал несколько вещей, но вот мой фрагмент кода на данный момент (и да, я знаю, что он испортился, нам нужно выяснить Delx иdely):

/* Rotate our original photo */
//  final float scale = getResources().getDisplayMetrics().density;
    canvas.drawBitmap(bmp, 0f, 0f, null);
    final float overlay_scale_factor = .5f;
    final int overlaywidth = (int)(overlay.getWidth() * overlay_scale_factor);
    final int overlayheight = (int)(overlay.getHeight() * overlay_scale_factor);
    final int delx = overlaywidth;
    final int dely = overlayheight;
    Matrix mat = new Matrix();
    mat.postRotate(270);
    mat.postScale(overlay_scale_factor, overlay_scale_factor);
    //mat.postTranslate(-delx, -dely);
    canvas.drawBitmap(overlay, mat, null);
    /* Bottom image 'composite' is now a composite of the two. */

Любая помощь приветствуется.Я знаю, что это просто математика, но я не очень разбираюсь в подобных вещах.

Первое изображение, «bmp», на 100% размером с холст.Второе изображение, «наложение» - это наложение, которое необходимо отцентрировать после поворота на 270 градусов.

1 Ответ

4 голосов
/ 09 января 2012

Абсолютно не проверено, но я ожидаю, что что-то подобное сработает:

// Set the origin (0,0) in the middle of the view
canvas.translate(width/2, height/2);

// Draw the first bitmap so it is centered at (0,0)
canvas.drawBitmap(bmp, -bmp.getWidth()/2, -bmp.getHeight()/2, null);

// Rotate & scale
canvas.save();
canvas.rotate(270);
canvas.scale(.5f);

// Draw the overlay
canvas.drawBitmap(overlay, -overlay.getWidth()/2, -overlay.getHeight()/2, null);
canvas.restore();
...