如何从两个RGB值中找到颜色的RGBA值?

我有一种预感,这是以前做过的,但我是一个完全的外行,并且不知道如何开始提出正确的问题。所以我将描述我想要做的事情...... 我有一个未知的ARGB颜色。我只知道它在两种已知的不透明背景颜色上显示的绝对RGB值,例如黑色0x000000和白色0xFFFFFF。所以,继续这个例子,如果我知道当显示超过0x000000时ARGB颜色是RGB 0x000080等效并且我知道当显示在0xFFFFFF以上时相同的ARGB颜色是RGB 0x7F7FFF等效,是否有办法计算原始ARGB颜色是什么? 或者这甚至可能???     
已邀请:
所以,你知道把(a,r,g,b)放在(r1,g1,b1)给你(R1,G1,B1)并把它放在(r2,g2,b2)给你(R2,G2) ,B2)。换句话说 - 顺便说一句,我打算在0到1范围内的单位工作 - 你知道(1-a)r1 + ar = R1,(1-a)r2 + ar = R2等。取这两个并减去:得到(1-a)(r1-r2)= R1-R2,因此a = 1-(R1-R2)/(r1-r2)。一旦你知道了,你就可以完成其他任务。 实际上,您应该计算在{R,G,B}的所有三个上进行计算得到的值,并对它们进行平均,以减少舍入误差的影响。事实上我建议你取一个= 1 - [(R1-R2)符号(r1-r2)+(G1-G2)符号(g1-g2)+(B1-B2)符号(b1-b2)] /(| r1-r2 | + | g1-g2 | + | b1-b2),相当于对更可靠的颜色进行加权。 现在你有例如r =(R1-(1-a)r1)/ a =(R2-(1-a)r2)/ a。如果a,r,g,b具有无限精度值,则这两个值相等,但实际上它们可能略有不同。平均它们:r = [(R1 + R2) - (1-a)(r1 + r2)] / 2a。 如果你的a值恰好非常小,那么你只会得到关于r,g,b的相当不可靠的信息。 (在a = 0的限制下你根本就得不到任何信息,显然你无能为力。)你可能会得到超出0..255范围的数字,在这种情况下我不会认为你可以比剪裁更好。 以下是它为您的特定示例所做的工作方式。 (R1,G1,B1)=(0,0,0); (R2,G2,B2)=(255,255,255); (R1,G1,B1)=(0,0,128); (R2,G2,B2)=(127127255)。所以a = 1 - [127 + 127 + 127] / [255 + 255 + 255] = 128/255,这恰好是a的256个实际可能值之一。 (如果不是,我们应该在这个阶段围绕它。) 现在r =(127-255 * 127/255)* 255/256 = 0;同样g = 0;和b =(383-255 * 127/255)* 255/256 = 255。 所以我们的ARGB颜色是80,00,00,FF。     
选择黑色和白色作为背景颜色是最佳选择,既便于计算又结果准确。有很多滥用符号...... a(RGB)+(1-a)0xFFFFFF = 0x7F7FFF a(RGB)+(1-a)0x000000 = 0x000080 从第一个减去第二个...... (1-a)0xFFFFFF = 0x7F7FFF-0x000080 = 0x7F7F7F 所以 (1-a)= 0x7F / 0xFF a =(0xFF-0x7F)/ 0xFF = 0x80 /​​ 0xFF A = 0x80 和RGB =(a(RGB))/ a = 0x000080 / a = 0x0000FF 你可以做一些与其他背景颜色选择非常相似的东西。 a越小,两种背景颜色越接近,您就越不能准确确定RGBA值。考虑A = 0或两种背景颜色相同的极端情况。     

要回复问题请先登录注册