Как преобразовать растровое изображение с черными пикселями в другой цвет в Android?

У меня есть растровое изображение с некоторыми прозрачными пикселями, а остальные в основном черные (некоторые черные пиксели могут иметь несколько полупрозрачных пикселей).

Мне нужно повторно использовать эти растровые изображения и хочу иметь возможность по существу создать маску из этого растрового изображения во время выполнения, а затем попытаться смешаться с блоком другого цвета (например, красного, зеленого и т. Д.), Чтобы конечный результат был таким же изображение, но с красным цветом (и те пиксели, которые были полупрозрачными черными пикселями, превращаются в полупрозрачные красные пиксели).

Я перепробовал все виды цветных фильтров и xfermodes, но не смог разобраться. Пожалуйста помоги!

2 ответа

Решение

Если вам не нужна высокая скорость, вы можете использовать простое решение, вручную смешивая пиксели.

final Bitmap bmp = /* there your bitmap */;

int w = bmp.getWidth();
int h = bmp.getHeight();

for (int x = 0; x < w; x++) {
  for (int y = 0; y < h; y++) {
    int color = bmp.getPixel(x, y);

    // Shift your alpha component value to the red component's.
    color = (color << 24) & 0xFF000000;

    bmp.setPixel(x, y, color);
  }
}

Если вам нужна более эффективная обработка, вы должны использовать (как минимум) метод getPixels или, более предпочтительно, собственную обработку.

 public void changeColor(Bitmap myBitmap) {

        int [] allpixels = new int [myBitmap.getHeight()*myBitmap.getWidth()];

        myBitmap.getPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight());

        for(int i = 0; i < allpixels.length; i++)
        {
            if(allpixels[i] == Color.BLACK)
            {
                allpixels[i] = Color.RED;
            }
        }

        myBitmap.setPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight());

    }
Другие вопросы по тегам