0

TGA ファイルと、TGA を読み取って使用するために必要なものがすべて含まれているライブラリがあります。

このクラスには、pixels() というメソッドがあり、ピクセルが RGBRGBRGB として格納されているメモリ領域を指すポインターを返します。

私の質問は、どうすればピクセル値を取得できますか?

私がこのようなものを作るとしたら:

img.load("foo.tga");
printf ("%i", img.pixels());

適切なアドレスが返されます。

このサイトでこのコードを見つけました:

struct Pixel2d
{
    static const int SIZE = 50;
    unsigned char& operator()( int nCol,  int nRow, int RGB)
    {
        return pixels[ ( nCol* SIZE + nRow) * 3 + RGB];
    }

    unsigned char pixels[SIZE * SIZE * 3 ];
};

int main()
{

    Pixel2d p2darray;
    glReadPixels(50,50, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, &p.pixels);

    for( int i = 0; i < Pixel2d::SIZE ; ++i )
    {
        for( int j = 0; j < Pixel2d::SIZE ; ++j )
        {
            unsigned char rpixel = p2darray(i , j , 0);
            unsigned char gpixel = p2darray(i , j , 1);
            unsigned char bpixel = p2darray(i , j , 2);
        }
    }
}

私にとってはうまくいくと思いますが、プログラムに img から読み取るように指示するにはどうすればよいですか?

4

1 に答える 1

1

Tga はさまざまなピクセル深度をサポートしています。また、使用しているライブラリがわかりません。しかし、一般的に言えば、pixels() は、ピクセルを含むバッファへのポインタを返す必要があります。議論のために、ピクセルをチャネルごとに8ビットのサブピクセルにアンパックすると、各ピクセルは3バイトで表されます。

したがって、バッファ内の特定のオフセットにあるピクセルにアクセスするには:

const u8* pixelBuffer = img.pixels():

u8 red   = pixelBuffer[(offset*3)+0];
u8 green = pixelBuffer[(offset*3)+1];
u8 blue  = pixelBuffer[(offset*3)+2];

画像バッファの幅がわかっている場合は、x 座標と y 座標からピクセルを取得できます。

u8 red = pixelBuffer[((x+(y*width))*3)+0];
于 2012-10-23T15:26:01.493 に答える