Android Studio 中的位图边界

Bitmap's bounds in Android Studio

我的问题是:位图必须是方形的,或者是否可以删除彩色图像周围不可见的部分?我在 SurfaceView 中有一个位图,中间有一只手,我想计算这只手的边界,删除它周围的不可见部分,因为我的 onClick 方法有问题。在不计算每个 X 和 Y 的情况下,是否可以通过方法或其他方式知道手的范围?提前致谢。

我们的想法是使用具有适当透明度的 png 文件,这意味着手周围的部分应该具有透明度。

现在为了在使用 BitmapFactory 时保持图像的透明度,请确保将图像拉入为 ARGB_8888

你能做的最好的事情就是拍下手的照片并将其裁剪到手的大小。

这样,您将拥有一个较小的文件,并且不必实施某种代码变通方法。

关于你的第一个问题:任何保持一定程度透明度的位图都必须有一个 alpha 通道,所以在你的情况下,一只手有一个 alpha 通道,因此你不能只删除那些 alpha 像素,因为如果你做透明部分将保持黑色。您必须使用 ARGB_4444 格式或 ARGB_8888 格式来保留此 Alpha 通道。至于获得位图边界,使用矩形或一些边界形状可能是椭圆形,以准确知道你的手指是否正在触摸它,你不能只确切地知道你的触摸是否在这只手的范围内,因为这个手图像,在某些部分包含不同的宽度和高度,但是您可以通过使用像素完美碰撞来测试您的触摸是否准确地触摸到您的手。这是它的工作原理:

class drawingView extends View {
    Rect rect = new Rect();
    Bitmap bitmap = yourHand;

    @Override
    public void onDraw(Canvas canvas) {
        canvas.drawBitmap(bitmap, x, y, null);
        rect.set(x, y, bitmap.getWidth(), bitmap.getHeight());
        invalidate();
    }

    public void onClick() {
        if(rect.contains(event.getX(), event.getY(), && bitmap.getPixel(event.getX() - rect.left, event.getY() - rect.top) != Color.TRANSPARENT) {
          // you know you exactly touched the hand even out of the transparent region
    }
}

我开始了你我相信你会明白这里发生了什么。 希望这会有所帮助:)