Android:如何移动位图?

标签 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);

最佳答案

我无法用您的代码重现这一点。 我已经用 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);

关于Android:如何移动位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4441888/

相关文章:

android - 更新到 Android studio Flamingo 2022.2.1 后,带有 dagger 的项目无法编译

java - 如何使用 Java 文件中的 R.Color 在 Android Studio 中更改操作栏 setBackgrounddrawable 颜色?

android - Wallpaper 中的许可验证库

c# - 如何从 C# 中的图形对象获取位图/图像?

c# - 在 C# 中的单色位图上绘制文本

Android - 以编程方式将项目添加到 ListView

java - 无法在 android 中创建 AndroidViewModel 类的实例

android - 使用 Google 的 ImageWorker 在 ListView 中加载图像导致 java.lang.RuntimeException

android - 在 Android 中扩展位图类?

android - Drawable 占用的内存是否比 Bitmap 少?