Android:如何移动位图?

时间:2010-12-14 17:02:10

标签: android bitmap

我想用一定的x和y偏移“移位”一个位图。通过移位,我的意思是,如果我有一个300x500的位图,并且我将它移动了-50的y偏移,我希望每个像素向上移动50个像素,并且沿着位图底部的300x50像素矩形为空白。如果shiftX和shiftY为负数,则下面的代码效果很好,但对于正值则根本不起作用。我不知道为什么?

Rect srcRect = new Rect(-shiftX, -shiftY, mBitmap.getWidth(), mBitmap.getHeight());
Rect destRect = new Rect(srcRect);
destRect.offset(shiftX, shiftY);

Canvas bitmapCanvas = new Canvas(mBitmap);
bitmapCanvas.drawBitmap(mBitmap, srcRect, destRect, null);

我尝试了很多不同的版本。似乎尝试使用正y转换位图总是会产生垃圾。在这个更简单的示例中,负的shiftY给出了预期的行为,但是正的shiftY给出了垃圾结果:

 Canvas bitmapCanvas = new Canvas(mBitmap);
 bitmapCanvas.drawBitmap(mBitmap, 0, shiftY, null);

*更新。这可以通过以下代码解决。但是,这不是内存效率。有关更好解决方案的任何建议吗?

Canvas bitmapCanvas = new Canvas(mBitmap);
Bitmap tempBitmap = mBitmap.copy(CONFIG.ARGB_8888, false);
bitmapCanvas.drawBitmap(tempBitmap, 0, shiftY, null);

2 个答案:

答案 0 :(得分:0)

我无法使用您的代码重现这一点。 我尝试了50和-50的偏移量,两者都按预期工作。

我在绘图方法中的代码:

// negative value: -50
Rect srcRect = new Rect(-(-50), -(-50), mBitmap.getWidth(), mBitmap.getHeight());
Rect destRect = new Rect(srcRect);
destRect.offset(-50, -50);

canvas.drawBitmap(mBitmap, srcRect, destRect, null);

或积极的:

// positive value: 50
Rect srcRect = new Rect(-50, -50, mBitmap.getWidth(), mBitmap.getHeight());
Rect destRect = new Rect(srcRect);
destRect.offset(50, 50);

canvas.drawBitmap(mBitmap, srcRect, destRect, null);

答案 1 :(得分:0)

简单的解决方案......

canvas.translate(dx, dy);

canvas.draw....();