java - 反转位图颜色

标签 java android colors

我有以下问题。我有一个图表程序,它的设计是黑色的,但图表(我从服务器获取的图像)是浅色的(它实际上只使用 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/

相关文章:

java - 将现有项目动态加载/导入到工作区

java - 我可以在@After 方法中放置单元测试结果验证吗?

java - Android:用于编写方程的库/示例代码?

android - phonegap/cordova filewriter 和 reader 不工作

iphone - UITableView如何改变颜色?

javascript - 如何 "sort"特定色调的颜色

java - 将 OOP java 转换为现代 C++ 代码、抽象方法和接口(interface)方法

java - 是否有任何 java 库来格式化 SQL?

android - 如何以编程方式在android中下载谷歌驱动器选择的文件?

javascript - 使用随机颜色对 div 的所有像素进行着色。允许使用 JavaScript