首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并两个ColorMatrix或在Imageview上同时应用两个或多个ColorMatrix

合并两个ColorMatrix或在Imageview上同时应用两个或多个ColorMatrix
EN

Stack Overflow用户
提问于 2012-08-15 18:24:38
回答 2查看 1.7K关注 0票数 3

我正在改变亮度,对比度,饱和度和色调的ImageView。我在上面搜了很多遍。

我有一些与ColorMatrix.一起工作的代码

1.亮度的 ColorMatrix是这样的

代码语言:javascript
复制
    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. For Contrast ColorMatrix是一种与不同的,它也能正常工作。

但是,所有这些individually.工作ColorMatrix这意味着上一次应用ColorMatrix的效果仅仅是ImageView上的场景,因为它正是这样做的,消除了以前应用的 ColorMatrix的效果,而设置最后一次应用ColorMatrix。

现在我想要同时合并或混合所有的ColorMatrix。的意思是要应用ColorMatrix的对比,对ColorMatrix的亮度/饱和度/色调的影响。

EN

回答 2

Stack Overflow用户

发布于 2012-08-15 18:55:36

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

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

代码语言:javascript
复制
C = B * A;
outpixel = C * inpixel 

等于

代码语言:javascript
复制
outpixel = B * A * inpixel

编辑

我刚刚注意到它们是5x4矩阵(最初我以为它们是4x4)。由于不能直接乘以它们,我认为在相乘前(使它们都是5x5)之前,应该在两个矩阵中添加一个第5标识行(0,0,0,0,1),并在乘积后丢弃第5行。

票数 3
EN

Stack Overflow用户

发布于 2014-01-31 12:31:36

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

代码语言:javascript
复制
ColorMatrix colorFilterMatrix = new ColorMatrix();
colorFilterMatrix.postConcat(getContrastMatrix(contrast));
colorFilterMatrix.postConcat(getBrightnessMatrix(brightness));

imageView.setColorFilter(new ColorMatrixColorFilter(colorFilterMatrix));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11974895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档