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

时间:2013-10-08 18:17:55

标签: java android imageview png pixel

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

示例图片:

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

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

所以:

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

2 个答案:

答案 0 :(得分:4)

  1. 如何判断图像中的特定像素是否“不可见”?注意:我知道我可以使用bitmap.getPixel(x,y);得到一个像素,但是一旦我拥有它,我不知道该怎么做;是否足够的测试?

    使用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);
    }
    
  3. 确保您的图片不仅包含透明像素。如果图像只有透明像素,则语句Bitmap.createBitmap(image, x1, y1, width, height);将通过异常。

答案 1 :(得分:1)

可能需要利用某种形式的图像处理库来实现您所请求的内容,以便在需要解决问题时保持处理能力,例如OpenCV或ImageMagick通过特定的函数调用快速回复您的信息。

据我所知,没有一种内置的方法来确定通过标准调用Android中存在的图像库。您可能需要对原始想法中提到的透明像素进行某种启发式检查。