5

これはかなり初歩的なことであり、おそらく本当に明らかな何かが欠けているのでしょうが、これには少し困惑しています。基本的に、PPM 画像全体を赤くしようとしているとしましょう (これは実際に私が行っていることではありませんが、トラブルシューティングのためにそれを使用します)。ピクセル値を格納するために使用している構造体があります。

typedef struct pixel_type
{
   unsigned char r;
   unsigned char g;
   unsigned char b;
}  pixel_t;

その構造体を指すために使用しているポインターは「バッファー」です。

pixel_t *buffer;

また、必要なスペースの量を割り当てました (画像の幅 * 画像の高さ * ピクセル値の数 [3] )

buffer = malloc(WIDTH*HEIGHT*sizeof(pixel_t));

次に、「for」ループを使用して、バッファー ポインターをステップ実行し、すべてのピクセル値を赤に変換します。

int i;
for (i=0;i<(WIDTH*HEIGHT);i++){
   buffer->r=255;
   buffer->g=0;
   buffer->b=0;
   buffer++;} //this part appears to be the problem

ここでの問題は、出力が真っ黒な画像で、上部にゴミ ピクセルがいくつかあることです。「buffer++」も取り出してみましたが、最初のピクセルは問題なく赤に変換されているように見えます。

何が欠けているのかわかりません。ポインターを作成するとき、末尾に「++」を付けて (* デリファレンスなしで) ポインターを実行するだけで、ポインターの次のアドレスにステップスルーできることを私は知っています。それにもかかわらず、これは問題のようです。誰かが私が間違っていることを教えてもらえますか?

再度、感謝します、

オースティン

4

2 に答える 2