0

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

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

4

1 回答 1

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 执行相同的操作,您会看到,如果不正确舍入,“绿色”的划分会影响“蓝色”。通过组件进行数学运算解决了这个问题。

于 2011-10-08T09:51:24.340 回答