我正在处理Android Studio中的位图冲突(检测两个图像实际碰撞的时间,而不仅仅是两个矩形),然后编写了以下方法。代码的第一部分(所有if语句)将确定两个相交矩形的位置,并创建一个由相交矩形之间的重叠组成的矩形。代码的第二部分尝试遍历新创建的矩形中的每个像素,并确定其是否透明。但是,为了做到这一点,我使用了pic1.getPixel(pic1和pic2是我的两个带有有效图像的位图),但是每次我尝试使用getPixel时,程序都会崩溃。另外,我检查以确保代码的第一部分正确运行并且可以正常工作。为什么会这样呢?
public Boolean isCollision(Rect r1, Rect r2 )
{
if(r1.intersect(r2))
{
Rect r3 = new Rect(0,0,0,0);
if (r2.left < r1.right && r2.top < r1.bottom && r2.right > r1.right && r2.bottom > r1.bottom)
{
r3.set(r2.left, r2.top, r1.right, r1.bottom);
}
else if (r2.right > r1.left && r2.top < r1.bottom && r2.left < r1.left && r2.bottom > r1.bottom)
{
r3.set(r1.left, r2.top, r2.right, r1.bottom);
}
else if (r2.left < r1.right && r2.bottom > r1.top)
{
r3.set(r2.left, r1.top, r1.right, r2.bottom);
}
else if(r2.right > r1.left && r2.bottom > r1.top)
{
r3.set(r1.left, r1.top, r2.right, r2.bottom);
}
Log.v("Debugging", "Made it part the overlapping rectangle creation");
for (int i = r3.left; i<r3.right; i++)
{
for (int j = r3.top; j < r3.bottom; j++)
{
/*Log.v("Debugging","Pixel 1: " + Integer.toString(pic1.getPixel(i,j)));
Log.v("Debugging","Pixel 2: " + Integer.toString(pic2.getPixel(i,j)));
Log.v("Debugging","Transparent color: " + Integer.toString(Color.TRANSPARENT));*/
if (pic1.getPixel(i,j) != Color.TRANSPARENT)
{
if (pic2.getPixel(i,j) != Color.TRANSPARENT)
{
return true;
}
}
}
}
Log.v("Debugging", "Made it past the pixel search");
}
return false;
}
最佳答案
我弄清楚了,原来是x和y值,我使用的是基于屏幕坐标系的像素位置。但是,对于getPixel,0,0点位于您要为其获取像素的图像的右上角。因此,当我执行getPixel(i-rect.left,j-rect.top)时,该问题得以解决。
关于android - Bitmap.getPixel崩溃程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31278915/