Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 如何在不更改结果颜色的情况下更改像素的alpha?_Image_Image Processing_Colors_Transparency - Fatal编程技术网

Image 如何在不更改结果颜色的情况下更改像素的alpha?

Image 如何在不更改结果颜色的情况下更改像素的alpha?,image,image-processing,colors,transparency,Image,Image Processing,Colors,Transparency,给定:一个像素,其颜色(表示为PC0)和alpha值(表示为PA0),该像素在某种颜色(表示为BC)的背景上分层 问题:如何将像素(PA0)的alpha值更改为另一个值(表示为PA1),以使像素和背景的合成颜色不会改变(PBC0==PBC1)?换句话说,您如何找到这样的PC1,使原始和生成的合成颜色(PBC0和PBC1)看起来相同 PBC0 = PC0*PA0 + BC*(1-PA0) = PC1*PA1 + BC*(1-PA1) 如果您同时知道PA0和PA1,您可以求解PC1 PC

给定:一个像素,其颜色(表示为PC0)和alpha值(表示为PA0),该像素在某种颜色(表示为BC)的背景上分层

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

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之间颜色值的通用约定,则用255替换上面的1。

So,BC=原始背景,PBC0=叠加像素颜色,PA0=原始alpha值,PA1=新alpha值。这些是哪一个?PBC0、PA0和PA1,但不是BC?@igorstrovsky给定:PC0=原始颜色,PA0=原始alpha,BC=恒定背景颜色,PA1=新alpha,这是除PC1之外的所有颜色,PC1是在像素的alpha从PA0过渡到PA1后,使像素在给定背景下看起来不变的颜色。PBC0和PBC1是由像素和背景组成的两种完全相同的不透明颜色,在阿尔法转换发生之前是PBC0,在阿尔法转换发生之后是PBC1。我能问一下应用程序是什么吗?我真的curious@MyCarta其应用是执行基于指定颜色(称为关键颜色)为图像生成透明度信息的处理的第二阶段,条件是如果在填充有关键颜色的背景上分层,则生成的图像应与原始图像看起来相同。第一阶段是通过将图像的每个像素与关键颜色进行比较并以某种方式估计两者之间的相似性来确定alpha值。第二阶段是修改半透明像素的颜色,以满足上述条件。有趣的是,Desmond,我将对此进行研究。谢谢,我刚刚用向量代数测试了它,测试值从0.0到1.0不等,非常成功!非常感谢你的回答,先生。我也有同样的问题。这真是太棒了!非常感谢。