Android位图转换数学

时间:2012-01-09 14:46:38

标签: android math matrix bitmap transformation

我需要将两张图片合二为一。基本上我需要做的就是将其中一个叠加在图像中心的另一个上面。这需要适用于所有主要的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 个答案:

答案 0 :(得分:4)

完全未经测试,但我希望这样的事情可以发挥作用:

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