2015-08-14 38 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

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

通過這種方式,您將擁有更小的文件,而不必實施某種代碼工作。