Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 位图.getPixel程序_Android_Android Studio_Bitmap_Crash_Collision Detection - Fatal编程技术网

Android 位图.getPixel程序

Android 位图.getPixel程序,android,android-studio,bitmap,crash,collision-detection,Android,Android Studio,Bitmap,Crash,Collision Detection,我在androidstudio中研究位图冲突(检测两个图像何时实际发生冲突,而不仅仅是两个矩形),并编写了以下方法。代码的第一部分—所有if语句—用于确定两个相交矩形的位置,并创建一个由相交矩形之间的重叠组成的矩形。代码的第二部分尝试遍历新创建的矩形中的每个像素,并确定它是否透明。然而,为了做到这一点,我使用了pic1.getPixel(pic1和pic2是我的两个位图,其中包含有效的图像),但是每次我尝试使用getPixel时,程序都会崩溃。我还检查了代码的第一部分,以确保代码的第一部分正确工

我在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,在我浏览代码时直接打开崩溃对话框