我有以下问题。我有一个图表程序,它的设计是黑色的,但图表(我从服务器获取的图像)是浅色的(它实际上只使用 5 种颜色:红色、绿色、白色、黑色和灰色)。
为了配合设计反转做得很好,唯一的问题是红色和绿色也反转了(绿色 -> 粉色,红色 -> 绿色)。
有没有办法反转除这两种颜色之外的所有颜色,或者有办法在反转后重新绘制这些颜色? 这些操作的成本是多少(因为我经常更新图表)?
提前致谢:)
更新
我尝试在循环中用 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);
}
}
}
不幸的是,该方法耗时太长(~650 毫秒),有没有更快的方法,setPixels() 方法会更快吗?
最佳答案
如果仅通过调用一次 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());
关于java - 反转位图颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4624531/