代码之家  ›  专栏  ›  技术社区  ›  LolloAAA

Android Studio中位图的边界

  •  -1
  • LolloAAA  · 技术社区  · 9 年前

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

    3 回复  |  直到 9 年前
        1
  •  1
  •   Alex Crist    9 年前

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

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

        2
  •  0
  •   abc    9 年前

    关于你的第一个问题:任何保持一定透明度的位图都必须有一个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
        }
    }
    

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

        3
  •  0
  •   borax12    9 年前

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

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