如何创建一个圆圈的边界框android

时间:2011-05-16 15:16:21

标签: android bitmap geometry bounding-box

我有一个位图,通过onTouchEvent()方法设置两个变量centreX,centreY。从这些x,y坐标我在位图上绘制一个圆,并可以通过slideBar将圆的像素更改为不同的rgb值。我使用算法来定位圆的内部像素,但遗憾的是,我必须逐个像素地搜索整个位图以定位圆的像素。这有一个庞大的方法调用开销,我想减少。

我正在考虑做的是在圆圈周围创建一个边界框,这样我的算法搜索空间就会减少,所以有希望加快速度。如何使用圆的x,y中心坐标和半径50来创建圆形的矩形?

非常感谢。

public void findCirclePixels(){ 


        for (int i=0; i < bgr.getWidth(); ++i) {
            for (int y=0; y < bgr.getHeight(); ++y) {

    if( Math.sqrt( Math.pow(i - centreX, 2) + ( Math.pow(y - centreY, 2) ) ) <= radius ){

                    bgr.setPixel(i,y,Color.rgb(Progress+50,Progress,Progress+100));
                }
            }
        }   

        }// end of changePixel()

2 个答案:

答案 0 :(得分:0)

将外圈限制从circle.x - radius更改为circle.x + radius,内圈限制从circle.y - radius到circle.y + radius。根据x和y的不同,您可能需要检查这些值是否小于0或大于图像宽度或高度的限制。

答案 1 :(得分:0)

这很好。

 public void findCirclePixels(){    



        for (int i=centreX-50; i < centreX+50; ++i) {
            for (int y=centreY-50; y <centreY+50 ; ++y) {

    if( Math.sqrt( Math.pow(i - centreX, 2) + ( Math.pow(y - centreY, 2) ) ) <= radius ){

                    bgr.setPixel(i,y,Color.rgb(Progress+50,Progress,Progress+100));
                }
            }
        }

        }// end of changePixel()