0

ソース配列とバックグラウンド配列の値をマージして、期待される値(回答配列)を取得することになっています。

    int[][] source =     { { 0, 0x44, 0x300, 0x660000 } };
    int[][] background = { { 2, 4,    0x600, 2 } };
    int[][] expected =   { { 1, 0x24, 0x400 , 0x330001 } };

問題は、3番目を除くすべてのケースの2セットの数値の平均を求めていることに気づきました(つまり、0x300 / 0x600を除くすべてのテストに合格しました)。3番目のケースは奇妙だと思います。2つの16進数を2進数で次のように表現しました。

    0011 0000 0000 (+)
    0110 0000 0000 I get:
    1001 0000 0000.

予想されるのは、0x400、基数10で1024、基数2で10000000000です。そのソリューションに到達する方法がわかりません。

4

1 に答える 1

2

この用語backgroundは私に考えさせます、それは画像/ピクセル操作と関係があります。そのコンテキストでは、各ピクセルには赤、緑、青の3つのコンポーネントが含まれています。各コンポーネントが1バイト幅(0〜255の値)の場合、32ビット整数は3つのコンポーネントすべてを保持できます。また、「緑」のチャネルが「青」のチャネルに影響を与えたくないため、「平均を取る」は各コンポーネントで個別に実行する必要があります。

表現が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 に答える