1

如何从绘制的圆圈中检测黑色像素canvas.drawcircle

canvas.drawCircle((float)(myMidPoint.x - myEyesDistance/2.0), myMidPoint.y, (float)30.0, myPaint);

int x1=(int) (myMidPoint.x) /2;

int y1=(int)(myMidPoint.y)/2;
// int x2=(int) (myMidPoint.x + myEyesDistance/2.0);
// int y2=(int) myMidPoint.y;
int pixelColor = myBitmap.getPixel(x1,y1);
if(pixelColor == Color.BLACK) {
    //The pixel is black
    System.out.println("pixel black");
} else {
    //The pixel was white
    System.out.println("pixel white");
}

我以前问过这个问题

4

1 回答 1

0

Color.BLACK 是 argb 十六进制值 0xff000000 的整数表示。因此,您的声明是检查圆中的中心点是否与 Color.BLACK 的透明度、红色值、蓝色值和绿色值完全相同。

几个选项:

您可以尝试使用仅比较 rgb 值

if(Color.rgb(Color.red(Color.BLACK), Color.green(Color.BLACK), Color.blue(Color.BLACK) == Color.rgb(Color.red(pixelColor), Color.green(pixelColor), Color.blue(pixelColor))

或者,您可以扫描整个圆圈以查找黑色 (0x000000) 像素。

或者,您可以使用色差算法,您可以根据需要测试不同的容差。这可以帮助您如何比较两种颜色的相似性/差异

以下内容尚未经过测试,但可以让您了解您还可以采取哪个方向:

//mid points x1 and y1
int x1=(int) (myMidPoint.x) /2;
int y1=(int)(myMidPoint.y)/2;
int radius = 30;
int topPoint = y1 - radius;
int leftPoint = x1 - radius;
int rightPoint = x1 + radius;
int bottomPoint = y1 + radius;
int scanWidth = 0;
for(int i = topPoint; i < bottomPoint; i++) 
{

    if(i <= y1)
    {
        scanWidth++;
    }
    else {
        scanWidth--;
    }
    for(int j = x1 - scanWidth; j < x1 + scanWidth; j++)
    {
        int pixelColor = myBitmap.getPixel(j,i);
        if(Color.rgb(Color.red(Color.BLACK), Color.green(Color.BLACK), Color.blue(Color.BLACK) == Color.rgb(Color.red(pixelColor), Color.green(pixelColor), Color.blue(pixelColor))
        {
            System.out.println("pixel black");
        }
    } 
} 
于 2013-07-24T06:05:30.163 回答