2013-10-01 2 views
0

В моем приложении мне приходится работать с отдельными пикселями изображения. прежде всего, я дам изображение в оттенках серого с этим кодомbitmap, работа с темными цветами

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) будет ли это работать?

ответ

1

Если ваша матрица серая, как вы говорите, тогда значения R = G = B.

Давайте возьмем наименее значимый «байт» и протестируем его.

int c = colore & 0xFF; 

c Предполагаемое значение от 0 до 255 включительно.

66%:

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

это легче работать с небольшими числами. попробуйте и опубликуйте результаты.

+0

Это работает? – hasan83

+0

извините за задержку. завтра проверили – Lele

Смежные вопросы