我应该合并源数组和背景数组的值以获得预期值(答案数组)。
int[][] source = { { 0, 0x44, 0x300, 0x660000 } };
int[][] background = { { 2, 4, 0x600, 2 } };
int[][] expected = { { 1, 0x24, 0x400 , 0x330001 } };
我注意到问题只是要求所有情况下两组数字的平均值除了第三组(意思是我已通过除0x300 / 0x600之外的所有测试)。第三种情况,我觉得很奇怪。我用二进制表示两个十六进制:
0011 0000 0000 (+)
0110 0000 0000 I get:
1001 0000 0000.
预期为0x400,基数10为1024,基数为2为100 0000 0000.我看不出如何达到该解决方案。
答案 0 :(得分:2)
术语background
让我想到,它与图像/像素操作有关。在该上下文中,每个像素包含红色,绿色和蓝色的三个分量。如果每个组件是一个字节宽(值从0到255),那么32位整数可以容纳所有三个组件。并且“取平均值”必须在每个组件上单独完成 ,因为您不希望“绿色”通道影响“蓝色”通道。
我们假设表示为0x00rrggbb。
src: 0x00660000 -> 0x00, 0x66, 0x00, 0x00
bac: 0x00000002 -> 0x00, 0x00, 0x00, 0x02
adding components: 0x00, 0x66, 0x00, 0x0x
dividing comp : 0x00, 0x33, 0x00, 0x01
exp: OK OK OK OK
对0x0300,0x0600执行相同操作,您将看到,如果未正确舍入,“绿色”的划分将影响“蓝色”。通过组件进行数学运算解决了这一问题。