使用ColorMatrixColorFilter

时间:2017-09-14 15:34:26

标签: android colors colorfilter

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

我试着像这样使用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));
        }
    });

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

你有没有尝试过:

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

2)Apply the ColorMatrix to the bitmap名为bmp_negative

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

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

最后,保留原始副本和原始副本之间的翻转更容易,更有效,而不是尝试重新计算原始颜色(在效果之前已有)。