0

私に与えられた指示は非常に曖昧で、何をすべきか完全に迷っていました。助けが要る。説明しようと思います。誰かが私を助けてくれることを願っています。

次のように値 col でピクセル (i,j) の色を設定する場合、指定された幅と高さの ppm ファイルを生成する必要があります。

float col = float (((i & 0x08) == 0) ^ ((j & 0x08) == 0));

RGB カラーに次の構造を使用することができます。

struct RGB {
    float r;
    float g;
    float b;
};

配列の各要素は [0.0, 1.0] の範囲にあり、ファイルに書き込む前に [0, 255] に変換する必要があります。

これは私が持っている情報とほぼ同じです。彼が実際に私に何をしてほしいのか、私は本当に迷ってしまいました。これは、経験豊富な人にとっては十分な情報かもしれませんが、私にとっては十分ではありません. 誰かがこれについて詳しく説明できますか。また、最初の数式/コード スニペットは一体何をするのでしょうか?

私はまだiとjが何であるか、式が何のためにあるのか、またはRGBの2次元配列に書き込む値を生成する方法を知りません!?!?

4

2 に答える 2

1

PPM は非常に単純なビットマップ形式です。基本的には質問で説明しました。詳細については、Google で検索するか、http://netpbm.sourceforge.net/doc/ppm.htmlを参照してください。

範囲 [0.0 .. 1.0] から [0 .. 255] に変換するには、各ピクセル コンポーネントに対して 255.0 を乗算するだけです。

要約すると、ppm ヘッダーをファイルに書き込み、すべてのピクセルを反復処理し、その成分を 255 倍し、整数に変換し、テキストとしてファイルに書き込みます。ファイル内のすべての値はスペースで区切られています。

最初のコード スニペットは、画像の生成方法を示しています。基本的には、右から4ビット目がi座標とj座標で異なれば白、同じなら黒ということになります。これにより、16 x 16 の正方形のチェッカーボード パターンが生成されます。

于 2013-01-16T05:59:14.017 に答える
0

最初の式では、[0 1] の範囲の値ではなく、 andのみ が取得されます。これは、演算子 == がor (ビット表現で 0 または 1) を返すためです。0 または 1 に対する演算 XOR ( ^ ) も 0 または 1 を返します。0s1struefalse

XOR 演算の真理値表は次のとおりです。

-----------------
| a | b | a ^ b |
-----------------
| 0 | 0 |   0   |
-----------------
| 0 | 1 |   1   |
-----------------
| 1 | 0 |   1   |
-----------------
| 1 | 1 |   0   |
-----------------

範囲 [0 1] から [0 255] への変換は、値に 255 を掛けるだけです。

void convertTo_255( struct RGB * array, size_t count {
    for ( size_t i = 0; i < count; i++ ) {
        array[ i ].r *= 255;
        array[ i ].g *= 255;
        array[ i ].b *= 255;
    }
于 2013-01-16T05:57:48.357 に答える