【问题标题】:How to change the alpha of a pixel without changing the resulting color?如何在不改变结果颜色的情况下改变像素的 alpha?
【发布时间】:2012-03-06 03:57:29
【问题描述】:

给定:一个像素,它的颜色(表示为 PC0)和 alpha 值(表示为 PA0),它叠加在某种颜色的背景上(表示为 BC)。

问题:如何将像素 (PA0) 的 alpha 值更改为另一个值(表示为 PA1),以使生成的像素和背景的合成颜色不改变(PBC0 == PBC1)?换句话说,您如何找到这样的 PC1 使原始和生成的复合颜色(PBC0 和 PBC1)看起来相同?

【问题讨论】:

  • 所以,BC=原始背景,PBC0=叠加像素颜色,PA0=原始 alpha 值,PA1=新 alpha 值。哪些是给出的? PBC0、PA0 和 PA1,但不是 BC?
  • @Igorostrovsky 给定:PC0 = 原始颜色,PA0 = 原始 alpha,BC = 恒定背景颜色,PA1 = 新 alpha,即除了 PC1 之外的所有内容,PC1 是应该构成像素的颜色在像素的 alpha 从 PA0 过渡到 PA1 后,在给定的背景下看起来没有变化。而 PBC0 和 PBC1 是像素和背景合成产生的两种相同的不透明颜色,发生 alpha 转换之前的 PBC0 和之后的 PBC1。
  • 我能问你申请的是什么吗?我真的很好奇
  • @MyCarta 该应用程序正在执行基于指定颜色(称为关键颜色)为图像生成透明度信息的过程的第二阶段,条件是生成的图像应该看起来如果在填充了主色的背景上分层,则与原始版本相同。第一阶段将通过将图像的每个像素与关键颜色进行比较来确定 alpha 值,并以某种方式估计两者之间的相似性。第二阶段是修改半透明像素的颜色以满足上述条件。
  • 有趣的东西 Desmond,我会研究一下。谢谢

标签: image image-processing colors transparency


【解决方案1】:
PBC0 = PC0*PA0 + BC*(1-PA0)
     = PC1*PA1 + BC*(1-PA1)

如果你知道 PA0 和 PA1,你可以解出 PC1。

PC1 = (PC0*PA0 + BC*(1-PA0) - BC*(1-PA1)) / PA1

编辑:如果您使用 0-255 范围内的颜色值的通用约定,则将上述 1 替换为 255。

【讨论】:

  • 我刚刚用向量代数测试了它,取值范围从 0.0 到 1.0,结果很成功!先生,非常感谢您的出色回答。
  • 我也有同样的问题。这非常有效!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多