【问题标题】:Merge Two ColorMatrix or Apply two or more ColorMatrix simultaneously on Imageview在 Imageview 上合并两个 ColorMatrix 或同时应用两个或多个 ColorMatrix
【发布时间】:2012-08-15 18:24:38
【问题描述】:

我正在更改 ImageView 的亮度、对比度、饱和度和色调。我已经搜索了很多。

我得到了一些适用于 ColorMatrix 的代码。

[1.] 对于 亮度,ColorMatrix 类似于

    float brightness = (-50F * 1.5F);
    ColorMatrix cmB = new ColorMatrix();
    cmB.set(new float[] { 1, 0, 0, 0, brightness,
    0, 1, 0, 0,brightness,
    0, 0, 1, 0, brightness,
    0, 0, 0, 1, 0 });
    myImageView.setColorFilter(new ColorMatrixColorFilter(cmB));

正常工作。

[2.]对于对比度,ColorMatrix是不同的东西,它也可以正常工作。

但是,所有这些 ColorMatrix单独工作。表示最后应用的 ColorMatrix 的效果只是 ImageView 上的场景,因为它确实做到了,移除了之前应用的 ColorMatrix 的效果,并且设置最后应用了 ColorMatrix。

现在我想同时合并或混合所有的 ColorMatrix。 意思是想将对比度的 ColorMatrix 应用到 Brightnrs/Saturation/Hue 的 ColorMatrix 的效果上。

【问题讨论】:

    标签: android image-processing android-imageview android-image colormatrix


    【解决方案1】:

    如果您想应用两个颜色矩阵,只需将它们相乘即可。

    如果你有颜色矩阵 A 和颜色矩阵 B,那么:

    C = B * A;
    outpixel = C * inpixel 
    

    等价于

    outpixel = B * A * inpixel
    

    编辑

    我刚刚注意到那些是 5x4 矩阵(最初我认为它们是 4x4)。由于您不能直接将它们相乘,我认为在相乘之前向两个矩阵添加第 5 行 (0,0,0,0,1) 是合适的(使它们都为 5x5),并在之后丢弃第 5 行相乘。

    【讨论】:

      【解决方案2】:

      您可以像这样应用多个矩阵:

      ColorMatrix colorFilterMatrix = new ColorMatrix();
      colorFilterMatrix.postConcat(getContrastMatrix(contrast));
      colorFilterMatrix.postConcat(getBrightnessMatrix(brightness));
      
      imageView.setColorFilter(new ColorMatrixColorFilter(colorFilterMatrix));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-22
        • 2016-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多