Android 位图.getPixel程序
我在androidstudio中研究位图冲突(检测两个图像何时实际发生冲突,而不仅仅是两个矩形),并编写了以下方法。代码的第一部分—所有if语句—用于确定两个相交矩形的位置,并创建一个由相交矩形之间的重叠组成的矩形。代码的第二部分尝试遍历新创建的矩形中的每个像素,并确定它是否透明。然而,为了做到这一点,我使用了pic1.getPixel(pic1和pic2是我的两个位图,其中包含有效的图像),但是每次我尝试使用getPixel时,程序都会崩溃。我还检查了代码的第一部分,以确保代码的第一部分正确工作,并且确实如此。为什么会这样Android 位图.getPixel程序,android,android-studio,bitmap,crash,collision-detection,Android,Android Studio,Bitmap,Crash,Collision Detection,我在androidstudio中研究位图冲突(检测两个图像何时实际发生冲突,而不仅仅是两个矩形),并编写了以下方法。代码的第一部分—所有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;
}
public Boolean isCollision(Rect r1,Rect r2)
{
if(r1.相交(r2))
{
Rect r3=新Rect(0,0,0,0);
如果(r2.leftr1.right&&r2.bottom>r1.bottom)
{
r3.集合(r2.左,r2.上,r1.右,r1.下);
}
否则如果(r2.right>r1.left&&r2.topr1.bottom)
{
r3.集合(r1.左,r2.上,r2.右,r1.下);
}
else if(r2.leftr1.top)
{
r3.集合(r2.左,r1.上,r1.右,r2.下);
}
else if(r2.right>r1.left&&r2.bottom>r1.top)
{
r3.集合(r1.左,r1.上,r2.右,r2.下);
}
v(“调试”,“使其成为重叠矩形创建的一部分”);
对于(int i=r3.left;i我算出了,对于x和y值,我使用了基于屏幕坐标系的像素位置。但是,对于getPixel,0,0点位于您尝试获取像素的图像的右上角。因此,当我获取像素时,问题得到了解决(i-rect.left,j-rect.top)异常是否是由IndexOutOfBoundsException
引发的?我不这么认为。据我所知,android studio会告诉我它是否引发了IndexOutOfBoundsException,但在我的代码中,它只会进入runTimeinIt.java,在我浏览代码时直接打开崩溃对话框