2

RGB 画像を A​​RGB 画像に変換しようとしていますが、基本的にはアルファ チャネルに 255 を追加するだけです。繰り返しなしでこれを行うパック方法があるかどうか疑問に思っていましたか? したがって、RGB データを繰り返し処理し、各ピクセルに 255 を追加します。

4

1 に答える 1

3

Cには「メソッド」がありません...そしていいえ、これは標準ライブラリにあるルーチンのようには聞こえません。次のようなものを使用して、自分でコーディングする必要があると思います。

void setAlpha(unsigned char *rgba, int width, int height, int alpha)
{
  int x, y;

  for(y = 0; y < height; y++)
  {
    for(x = 0; x < width; x++, rgba += 4)
    {
      rgba[3] = (unsigned char) alpha;
    }
  }
}

基本的な仮定:

  • メモリ内のパッキング順序は RGBA です。つまり、オフセットは、ピクセルの先頭からアルファ バイトまで 3 です。
  • 画像は、左上のピクセルを初期アドレスとして、右から左、上から下の順序で格納されます。
  • パディングなどはありません

ループの順序にも注意してください。これは、キャッシングにより、実際のパフォーマンスに大きな違いをもたらす可能性があります。このコードは、メモリ内で近いピクセルに順番に接触します。これは、「良好な局所性」と呼ばれます。

アドレス ( ) を示すのではなく、次のピクセルを指すようにポインターを変更することrgba[4 * y * width + 4 * x + 3]も最適化であり、(私にとって) 理解するのは簡単です。

于 2009-04-22T11:41:23.260 に答える