2015-08-14 71 views
-1

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

回答

0

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

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 
    } 
} 

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

0

这个想法是使用正确的透明度的PNG文件,这意味着手部分应该具有透明度。

现在对于保持图像的透明度使用BitmapFactory时,请确保您的图片作为ARGB_8888

+1

Wut。我认为你需要澄清。 – Carcigenicate

1

拉到你能做的最好的事情将是搭手的图片和裁剪降到手的大小。

通过这种方式,您将拥有更小的文件,而不必实施某种代码工作。