我有一个位图,通过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()
答案 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()