反转位图颜色

Ale*_*lov 6 java android colors

我有以下问题.我有一个图表程序,它的设计是黑色的,但图表(我从服务器获得的图像)很轻(它实际上只使用5种颜色:红色,绿色,白色,黑色和灰色).

为了适应设计倒置做得很好,唯一的问题是红色和绿色也是倒置的(绿色 - >粉红色,红色 - >绿色).

有没有办法可以反转除了那两种颜色之外的所有颜色,或者在反转后重新绘制这些颜色的方法?这些操作的成本是多少(因为我经常更新图表)?

提前致谢 :)

UPDATE

我尝试在循环中用setPixel方法替换颜色

for(int x = 0 ;x < chart.getWidth();x++) {
        for(int y = 0;y < chart.getHeight();y++) {
            final int replacement = getColorReplacement(chart.getPixel(x, y));
            if(replacement != 0) {
                chart.setPixel(x, y, replacement);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个方法花了太长时间(~650ms),是否有更快的方法,并且setPixels()方法工作得更快?

Uty*_*tyi 7

如果通过仅调用一次getPixels将图像数据复制到int数组中,并且不调用循环内的任何函数,则操作位图要快得多.只需操作数组,然后在结尾调用setPixels.

像这样的东西:

int length = bitmap.getWidth()*bitmap.getHeight();
int[] array = new int[length];
bitmap.getPixels(array,0,bitmap.getWidth(),0,0,bitmap.getWidth(),bitmap.getHeight());
for (int i=0;i<length;i++){
// If the bitmap is in ARGB_8888 format
  if (array[i] == 0xff000000){
    array[i] = 0xffffffff;
  } else if ...
  }
}
bitmap.setPixels(array,0,bitmap.getWidth(),0,0,bitmap.getWidth(),bitmap.getHeight());
Run Code Online (Sandbox Code Playgroud)