Как преобразовать растровое изображение с черными пикселями в другой цвет в 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());
}