чтение файлов TGA в OpenGl для создания 3D-файла

У меня есть файл TGA и библиотека, в которой уже есть все, что мне нужно для чтения TGA и использования их.

Этот класс имеет метод пикселов (), который возвращает указатель, который указывает на область памяти, где пиксель хранится как 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?

0

Решение

Tga поддерживает разную глубину пикселей. И мы не знаем, какую библиотеку вы используете. Но вообще говоря пиксели () должны возвращать указатель на буфер, содержащий пиксели. Скажем, ради аргумента он распаковывает пиксели в 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];
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]