2017-09-14 119 views
0

我想反转黑白图像的颜色并将该反转显示为动画。 动画应从白色背景变为黑色(黑色背景白色汽车),然后恢复为白色(白色背景,黑色汽车)。 你可以在这里看到的影像: enter image description here animated使用ColorMatrixColorFilter反转颜色(负)

我试图用ColorMatrixColorFilter这样的:

final ValueAnimator colorAnim = ValueAnimator.ofInt(0, 255); 
    colorAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator animation) { 
      int color = (int) animation.getAnimatedValue(); 
      float[] NEGATIVE = { 
        -1.0f, 0, 0, 0, color, // red 
        0, -1.0f, 0, 0, color, // green 
        0, 0, -1.0f, 0, color, // blue 
        0, 0, 0, 1.0f, 1 // alpha 
      }; 
      v.setColorFilter(new ColorMatrixColorFilter(NEGATIVE)); 
     } 
    }); 

但它不会返回到默认的图像(白色背景,黑色的车)。 计算不好。 如何计算适当的值?

我试图找到如何做到这一点,但我没有发现任何有用的东西。

谢谢!

回答

0

你尝试:

1)从加载图像,创建两个副本位图到变量,例如:bmp_originalbmp_negative

2)Apply the ColorMatrix to the bitmap调用bmp_negative

3)创建一个在两个位图之间淡入淡出的函数(或淡化它们的容器)。

这比试图通过ColorMatrix恢复原始颜色(错误的工具)要好。对于反转的颜色,最好使用For循环来检查和更改每个像素的RGB值。

最后,保留原件和原件之间的翻转以及在原件和受影响件之间翻转比试图重新计算原始颜色(在效果之前已经拥有的颜色)更容易和更有效。