我的问题是:位图必须是正方形还是可以删除彩色图像周围的不可见部分?我在SurfaceView中有一个位图,手在中心,我想计算这只手的边界,删除它周围的不可见,因为我有onClick方法的问题。如果不计算每个X和Y,可以通过Method或其他东西知道手的边界吗?提前谢谢。
答案 0 :(得分:0)
这个想法是使用具有正确透明度的png文件,这意味着手周围的部分应该具有透明度。
现在,为了在使用BitmapFactory时保留图像的透明度,请确保将图像作为ARGB_8888拉入
答案 1 :(得分: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
}
}
我开始你了,我相信你会明白这里发生了什么。 希望这会有所帮助:)