2016-07-07 2 views
0

Я пытаюсь получить массив байтов пикселей. Я использую ARGB_8888 для функции decodeByteArray для . GetPixels() или copyPixelsToBuffer(), возвращают массив в форме R G B A. Возможно ли получить из них только R G B, не создавая новый массив и не копируя байты, которые мне не нужны. Я знаю, что есть RGB_565, но это не оптимально для моего случая, когда мне нужен байт на цвет.Байт в пикселях байтов в пикселях без альфа-канала

Спасибо.

ответ

0

Используйте color=bitmap.getPixel(x,y) для получения Цвета цвета в указанном месте. Затем используйте методы red(color), green(color) и blue(color) из класса Color, который представляет каждое значение цвета в диапазоне [0..255].

Что касается альфа-канала, можно умножить его соотношение на любой другой цвет.

Вот пример реализации:

int width = bitmap.getWidth(); 
    int height = bitmap.getHeight(); 
    ByteBuffer b = ByteBuffer.allocate(width*height*3); 
    for (int y=0;y<height;y++) 
     for (int x=0;x<width;x++) { 
      int index = (y*width + x)*3; 
      int color = bitmap.getPixel(x,y); 
      float alpha = (float) Color.alpha(color)/255; 
      b.put(index, (byte) round(alpha*Color.red(color))); 
      b.put(index+1, (byte) round(alpha*Color.green(color))); 
      b.put(index+2, (byte) round(alpha*Color.blue(color))); 
     } 
    byte[] pixelArray = b.array(); 
Смежные вопросы