@frilix
Иногда "творю"

Получить информацию о пикселе RGB?

Добрый день! Изучаю OpenGL и возникла необходимость получить информацию о пикселе из картинки, а именно значение R * G * B.

Загрузка картинки происходит посредством  stbi:

int width, height, numComponents;
    unsigned char * data = stbi_load("./resources/models/terrain/heightmap.png", &width, &height, &numComponents, STBI_rgb);

    if(data == NULL)
        std::cerr << "Unable to load texture: hightmap.png" << std::endl;


 После загрузки в data информация хранится в формате:
f45eec83b8b147b9832dbce0707cf23b.png

Предположил, что пиксели в data  хранятся следующим образом:  r1g1b1r2g2b2 .. и написал простенькую функцию:
int Terrain::GetRGB(int x, int y, unsigned char * image, int width, int height)
{
    int rgb;

    rgb = image[3 * x * width + 3 * y * height]     +
          image[3 * x * width + 3 * y * height + 1] +
          image[3 * x * width + 3 * y * height + 2];

    return rgb;
}


Но функция вылетает при значении:
5a31c230d9a649c8b1ff0b9a1375dd02.png

Может кто-то работал с этим форматом и знает как его использовать, для того чтобы получить пиксель? Буду признателен
  • Вопрос задан
  • 272 просмотра
Решения вопроса 1
AMar4enko
@AMar4enko
Скорей уж
R - (y * width + x) * 3
G - (y * width + x) * 3 + 1
B - (y * width + x) * 3 + 2

x и y с 0, не с 1
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы