У меня есть несколько файлов PNG, к которым я применяю цвет.Цвет меняется в зависимости от выбора пользователя.Я меняю цвет с помощью 3 значений RGB, установленных другим способом.Файлы png имеют произвольную форму с полной прозрачностью вне формы.Я не хочу изменять прозрачность, только значение RGB.В настоящее время я устанавливаю значения RGB попиксельно (см. Код ниже).
Я пришел к выводу, что это невероятно медленно и, возможно, просто недостаточно эффективно, как в приложении.Есть ли лучший способ, которым я мог бы сделать это?
Вот что я сейчас делаю.Вы можете видеть, что массив пикселей огромен для изображения, которое занимает приличную часть экрана:
public void foo(Component component, ComponentColor compColor, int userColor) {
int h = component.getImages().getHeight();
int w = component.getImages().getWidth();
mBitmap = component.getImages().createScaledBitmap(component.getImages(), w, h, true);
int[] pixels = new int[h * w];
//Get all the pixels from the image
mBitmap[index].getPixels(pixels, 0, w, 0, 0, w, h);
//Modify the pixel array to the color the user selected
pixels = changeColor(compColor, pixels);
//Set the image to use the new pixel array
mBitmap[index].setPixels(pixels, 0, w, 0, 0, w, h);
}
public int[] changeColor(ComponentColor compColor, int[] pixels) {
int red = compColor.getRed();
int green = compColor.getGreen();
int blue = compColor.getBlue();
int alpha;
for (int i=0; i < pixels.length; i++) {
alpha = Color.alpha(pixels[i]);
if (alpha != 0) {
pixels[i] = Color.argb(alpha, red, green, blue);
}
}
return pixels;
}