0

在我的应用程序中,我必须处理图像的单个像素。首先,我用这段代码给出灰度图像

private Bitmap BiancoNero(Bitmap originalBitmap) {
        ColorMatrix colorMatrix = new ColorMatrix();
        colorMatrix.setSaturation(0);

        ColorMatrixColorFilter colorMatrixFilter = new ColorMatrixColorFilter(
                colorMatrix);

        Bitmap blackAndWhiteBitmap = originalBitmap.copy(
                Bitmap.Config.ARGB_8888, true);

        Paint paint = new Paint();
         paint.setColorFilter(colorMatrixFilter);

        Canvas canvas = new Canvas(blackAndWhiteBitmap);
        canvas.drawBitmap(blackAndWhiteBitmap, 0, 0, paint);

        return blackAndWhiteBitmap;
    }

之后,使用以下控件绘制一个只有 0 和 1(0 白色,1 黑色)的矩阵

if(colore==-1)
        matrice[i][j] = 0; //zero is for white
                                else if(colore == -16777216)
                                        matrice[i][j] = 1; //black pixel
                                else
                                        matrice[i][j] =0; //other shades of gray

我如何获得深灰色的细微差别?也就是说,当我们考虑白色 0% 和黑色 100% 时,我想找到我刚刚放入的所有高于 66% 的颜色 if> color = 5592405 (相当于 -16777216 / 3 )会起作用吗?

4

1 回答 1

1

如果您说的矩阵是灰色的,那么 R = G = B 值。

让我们取最不重要的“字节”并基于它进行测试。

int c = colore & 0xFF;

c 应该是介于 0 和 255 之间的值。

66%:

if ((float)c > 255.0f*0.66f)

处理小数字更容易。尝试并发布结果。

于 2013-10-01T21:20:32.440 回答