我正在寻找一种方法来查找图像的可见部分的尺寸。我在ImageView
中显示的图像是.png格式,它有一部分是“可见的”,其余部分是不可见的背景。
示例图片:
←该框在真实图像上不可见,只是为了说明我的观点
所以在这个图像中只有一个小的红色楔形可见,但是完整的.png实际上是一个更大尺寸的矩形,因此我不能使用像bitmap.getWidth();
这样的东西
所以:
bitmap.getPixel(x, y);
获取一个像素,但是一旦我拥有它,我就不知道该怎么做了;是一个足够的测试?答案 0 :(得分:4)
如何判断图像中的特定像素是否“不可见”?注意:我知道我可以使用bitmap.getPixel(x,y);得到一个像素,但是一旦我拥有它,我不知道该怎么做;是否足够的测试?
使用image.getPixel(x, y) != Color.TRANSPARENT
检查像素是否可见。
是否有更好的方法可以找到“可见”部分的最大宽度/高度,而不是遍历每个像素寻找可见的“终点”?
没有内置功能。您可以使用以下功能将图像设置为方形,从而保留透明像素。
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);
将通过异常。
答案 1 :(得分:1)
可能需要利用某种形式的图像处理库来实现您所请求的内容,以便在需要解决问题时保持处理能力,例如OpenCV或ImageMagick通过特定的函数调用快速回复您的信息。
据我所知,没有一种内置的方法来确定通过标准调用Android中存在的图像库。您可能需要对原始想法中提到的透明像素进行某种启发式检查。