我应该合并源数组和背景数组的值以获取期望值(答案数组)。

    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为基数的基数,以2为基数的100 0000 0000,我看不到如何获得该解决方案。

最佳答案

术语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进行同样的操作,您将看到,如果未正确舍入,“绿色”的划分将影响“蓝色”。通过组件进行数学运算可以解决此问题。

07-25 21:08
查看更多