【问题标题】:Bitmap's bounds in Android StudioAndroid Studio 中位图的边界
【发布时间】:2015-08-14 18:09:02
【问题描述】:

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

【问题讨论】:

    标签: java android image bitmap surfaceview


    【解决方案1】:

    您可以做的最好的事情是拍下手的照片并将其裁剪到手的大小。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 哇。我想你需要澄清一下。
        猜你喜欢
        • 2021-04-07
        • 1970-01-01
        • 2012-06-17
        • 1970-01-01
        • 1970-01-01
        • 2015-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多