Изображение Stb не загружается в данные правильно

#c #image #jpeg

#c #изображение #jpeg

Вопрос:

Я использую stb_image.h библиотеку, и моя цель — получить данные rgb для каждого из пикселей jpg. Но когда я вызываю функцию загрузки, она выдает мне только кучу странных символов, а не фактические числа. Может ли это быть связано с изображением или мой код просто неправильный?

 #define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

#include <iostream>
#include <string>

using namespace std;
int main()
{
    int width, height;
    int comp;
    const char* filename = "C:/Users/graha/source/repos/AiFirsy/Debug/rainbow.jpg";

    unsigned char* data = stbi_load(
        filename, amp;width, amp;height, amp;comp, 0);

    if (data == nullptr) {
        std::cerr << "ERROR: Could not load texture image file '" << filename << "'.n";
        width = height = 0;
    }

    cout << data[0];

}
 

Вот изображение

rainbow.jpg

Ответ №1:

Выходной поток ( std::cout в данном случае) будет интерпретировать типы ‘char’ как символы. Если вы хотите увидеть числовые значения, вы можете привести значения к соответствующему типу. Например:

 unsigned char const value = 'c';
    
std::cout << value << std::endl;
std::cout << static_cast<unsigned int>(value) << std::endl;
 

Выводит:

 c
99
 

Кроме того, в качестве исключения, вы получаете доступ data , даже если оно равно null, что, я предполагаю, не то, что вы хотите.