Canvas.drawBitmap()没有正确放置图像

时间:2014-01-05 00:53:41

标签: android bitmap

我正在尝试将位图叠加到另一个位置,将其放在用户触摸的位置。这是代码:

 public static Bitmap mergeImage(Bitmap base, Bitmap overlay, float x, float y)
 {
    Bitmap mBitmap = Bitmap.createBitmap(base.getWidth(), base.getHeight(), Config.ARGB_8888);
     Canvas canvas = new Canvas(mBitmap);
     canvas.drawBitmap(base, 0, 0, null);
     canvas.drawBitmap(overlay, x, y, null);
     return mBitmap;
 }

这里的问题是,尽管x&正确获得y坐标(我检查过),叠加位图放置不正确。

当围绕图像的左上部分时,放置是正确的。然而,当我向右和向下移动时,位置似乎有不同的缩放(即如果我触摸屏幕的右下角,叠加层位于图像中间附近,如果我触摸左下角,则位于中间附近左边的图像等等)

两张图像的密度相同(320)。

编辑:新问题,我减少了两个图像的大小,现在放置大致准确。但是将图像保存到SD卡会使叠加图像偏斜到另一个(非常随机的)位置

1 个答案:

答案 0 :(得分:0)

我找到了使用Matrix设置位置和缩放x,y

的解决方案
    public static Bitmap mergeImage(Bitmap base, Bitmap overlay, float x, float y)
    {
        Bitmap mBitmap = Bitmap.createBitmap(base.getWidth(), base.getHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(mBitmap);
        Matrix matrix = new Matrix ();
        matrix.postTranslate( x,y);
        canvas.drawBitmap(base, 0, 0, null);
        canvas.drawBitmap(overlay, matrix, null);
        return mBitmap;
    }

我花了类似的东西,我找到了解决方案,你可以在siguiete链接中看到我的帖子

canvas.drawBitmap bad Location and size (not placing image correctly)