Bitmap.getPixel崩溃了程序

时间:2015-07-07 20:44:34

标签: android android-studio bitmap crash collision-detection

我正在研究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;

}

1 个答案:

答案 0 :(得分:0)

我弄清楚了,结果是x和y值,我正在使用基于屏幕坐标系的像素位置。但是,对于getPixel,0,0点位于您尝试获取像素的图像的右上角。因此,当我使用getPixel(i-rect.left,j-rect.top)

时,问题就解决了