2009-04-22 2 views
2

RGB画像をARGB画像に変換しようとしていますが、基本的にはアルファチャンネル用に255 inを追加するだけです。繰り返しなしでこれを行うためのパック方法があるかどうか疑問に思っていましたか?だから私のRGBデータを繰り返し、各ピクセルに255を追加します。Cのビットパッキング

+0

構造を見ることはできますか? –

+0

それは単純にunsigned char *を取って、それを別のunsigned char *に変換します.4番目のバイトごとに255を挿入します。 –

答えて

3

Cには「メソッド」がありません。また、標準ライブラリにルーチンがあるようには聞こえません。開始オフセットから、アルファバイトに3を、すなわち、

  • パッキング順序がメモリにRGBAです:

    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[4 * y * width + 4 * x + 3])というよりむしろ次のピクセルを指すようにポインタを変更することも最適化であり、(私にとっては)理解しやすいほどです。

+0

それは私がとにかく持っていたものですが、変数を少し減らしました。助けてくれてありがとう –