我有一些png文件正在應用顏色。顏色根據用戶選擇而改變。我通過另一種方法設置的3個RGB值更改顏色。 png文件是一個隨機形狀,在形狀之外具有完全透明度。我不想修改透明度,只有RGB值。目前,我正在逐個像素地設置RGB值(請參閱下面的代碼)。設置一個(PNG)位圖顏色而不是像素的更快方法
我已經意識到這是非常慢,可能只是沒有足夠的效率在應用程序中。有沒有更好的方法可以做到這一點?
這是我目前正在做的。你可以看到,像素陣列是巨大的,佔用了屏幕的體面部分的圖像:
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;
}
也許你可以使用一個圖像與一個調色板?由於所有內容都使用一種顏色,這意味着無論如何,只能從一個輸入中獲得256種可能的像素顏色(因爲RGB部分將是相同的,並且只有A部分會有所不同)。如果您的圖像具有256種不同顏色的調色板,而這些顏色只與alpha通道的值不同,則只需修改調色板,而不是圖像數據本身。 – 2010-11-22 23:06:49
我要麼不理解你,要麼你不瞭解我的問題。我想修改的每個圖像都有2個alpha值,完全透明和半透明/不透明。我想修改RGB值並保持alpha值相同。這就是說,雖然我得到調色板的概念,但在android中沒有Palette類。你建議我讀什麼? – user432209 2010-11-22 23:32:06