1

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

示例图像:

在此处输入图像描述 ←<sub>那个框在实图上是看不到的,只是为了说明我的观点

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

所以:

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

2 回答 2

4
  1. 如何确定图像中的特定像素是否“不可见”?注意:我知道我可以使用 bitmap.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);将通过异常。

于 2013-10-08T18:26:28.177 回答
1

您可能需要利用某种形式的图像处理库来实现您的要求,以便降低处理速度,如果 OpenCV 或 ImageMagick 等问题可能会将该信息返回给您可以通过特定的函数调用快速进行。

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

于 2013-10-08T18:30:19.307 回答