我想将位图“移动”一定的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转换位图总是会产生垃圾。在这个简单的示例中,负移位给出预期行为,而正移位给出垃圾结果:
 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);

最佳答案

我不能用你的代码复制这个。
我试过用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);

07-28 01:50
查看更多