有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java有没有办法在ImageView中找到图像可见部分的大小?

我在寻找一种方法来找到图像中可见部分的尺寸。我在我的ImageView中显示的图像是。png格式,它有一部分是“可见”的,其余部分是不可见的背景

示例图像:

enter image description here那个框在真实图像上不可见,只是为了说明我的观点

因此,在这张图片中,只有一个小的红色楔形可见,但完整的。png实际上是一个更大尺寸的矩形,因此我不能使用bitmap.getWidth();

所以:

  1. 如何确定图像中的特定像素是否“不可见”?注意:我知道我可以使用bitmap.getPixel(x, y);获得一个像素,但一旦我有了它,我不知道该怎么办;测试0是否足够
  2. 除了遍历每个像素寻找可见的“端点”,还有没有更好的方法找到“可见”部分的最大宽度/高度

共 (1) 个答案

  1. # 1 楼答案

    1. 如何确定图像中的特定像素是否“不可见”?注:我知道我可以使用位图。getPixel(x,y);为了得到一个像素,但我不知道一旦有了它该怎么办;测试0是否足够

      使用image.getPixel(x, y) != Color.TRANSPARENT检查像素是否可见

    2. 除了遍历每个像素寻找可见的“端点”,还有没有更好的方法找到“可见”部分的最大宽度/高度

      没有内置的功能。您可以使用下面的函数来获得正方形的图像,而不使用透明像素

      public static Bitmap removeTransparentPixels(Bitmap image) {
      
          int x1 = image.getWidth();
          int y1 = image.getHeight();
      
          int width = 0, height = 0;
      
          for (int x = 0; x < image.getWidth(); x++) {
              for (int y = 0; y < image.getHeight(); y++) {
                  if (image.getPixel(x, y) != Color.TRANSPARENT) {
                      if (x < x1) {
                          x1 = x;
                      } else if (x > width) {
                          width = x;
                      }
      
                      if (y < y1) {
                          y1 = y;
                      } else if (y > height) {
                          height = y;
                      }
                  }
              }
          }
      
          width = width - x1;
          height = height - y1;
      
          return Bitmap.createBitmap(image, x1, y1, width, height);
      }
      

    确保你的图像不仅仅包含透明像素。如果图像只有透明像素,则语句Bitmap.createBitmap(image, x1, y1, width, height);将通过异常