2011-05-16 27 views
1

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

我想要做的是在圆周上创建一个边界框,这样我的算法搜索空间就会减少,所以希望能够加快速度。我如何使用圆的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() 
+0

我想,画一个新的圈子要便宜得多。你应该考虑引入一个框架步骤或只是清除并重新创建屏幕内容 – kostja 2011-05-16 15:22:40

+0

@kostja你好,我不确定你是否理解我的要求,对不起,如果你这样做:)。我只是将圆的像素设置为不同的颜色,以确保滑块和像素算法能够正确分辨像素。该应用程序最终将在圆上应用鱼眼效果(基本上扭曲圆的像素)。我可以在位图中找到圆的像素的唯一方法是从左到右,从上到下,逐个像素搜索整个位图。我只想在圈子周围搜索一个矩形,所以没有电话。 – turtleboy 2011-05-16 15:40:18

+0

我以为我明白你的要求,但我不再那么肯定,特别是关于为什么:)如果它不适合你的问题,请忽略我的第一个评论。 – kostja 2011-05-17 08:02:28

回答

0

变化从circle.x您的外环限制 - 半径circle.x +半径,从circle.y您的内环限制 - 半径circle.y +半径。根据你的x和y的大小,你可能需要检查这些值是否小于0或大于图像宽度或高度的限制。

+0

粘土嗨,是不是我的外部循环限制bgr.getWidth()? – turtleboy 2011-05-16 15:52:39

+0

粘土我不确定你的意思是下面的答案,但这是我做的,现在它快得多,谢谢。 – turtleboy 2011-05-16 16:06:04

+0

@turtleboy,我很高兴它对你来说更快,但如果我明白你做了什么,你应该能够通过改变我所说的限制来加快速度。你应该可以做类似“i = circle.x - radius; i <= circle.x + radius; ++ i){”和“y = circle.y - radius; y <= circle.y + radius ; ++ y){“。再次,你必须检查,当你减去半径时,它不小于0,并且当你将半径添加到circle.x时,它不会大于bgr.getWidth(),并且当你添加圆的半径,表示结果不大于bgr.getHeight()。 – 2011-05-16 16:11:32

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()