Как решить ошибку stbi_load "нет SOI"? - PullRequest
0 голосов
/ 29 апреля 2020

Я загружаю картинку на stbi_load, но произошла ошибка no SOI. Я использовал изображение в другом проекте, и оно было успешно загружено. Так что я думаю, что путь картины и будущего действителен. Но я не знаю, почему произошла ошибка? Вот несколько основных кодов:

// Texture2D is a class of textures 
Texture2D ResourceManager::loadTextureFromFile(const GLchar *file, GLboolean alpha){
    // create texture object
    Texture2D texture;
    if (alpha){
        texture.Internal_Format = GL_RGBA;
        texture.Image_Format = GL_RGBA;
    }
    // load picture
    int width, height, nrChannels;
    unsigned char *image = stbi_load(file, &width, &height, &nrChannels, 0);
    if (stbi_failure_reason())
        std::cout << stbi_failure_reason() << std::endl;
    // generate texture
    texture.Generate(width, height, image);
    // free image
    stbi_image_free(image);
    return texture;
}

Я использую loadTextureFromFile("./Data/awesomeface.png", GL_TRUE); для получения текстуры. И stbi_failure_reason() возвращает no SOI. Когда я отлаживаю проект в VS2013, память image действительна, но отображает characters in a string are invalid. Кто-нибудь поможет?

1 Ответ

0 голосов
/ 29 апреля 2020

из старого проекта, который я нашел на своем диске. Я больше не привык к C ++, поэтому я не уверен, имеет ли это отношение к вашей проблеме, но я думаю, что смотрю на код C ++?

  auto textureBuffer = stbi_load("graphics/texture.png", &width, &height, &bitppx, 4);

, и я нашел кое-что о повреждении .png файлы с stb

Некоторые PNG выглядят достаточно как JPEG, так что тест формата файла JPEG будет с ошибкой «no SOI» вместо отклонения изображения в формате JPEG.

https://github.com/nothings/stb/issues/787

решения:

  • проверьте правильность пути к файлу

  • проверить, работает ли другой .png

  • использовать автоматический текстурный буфер вместо указателя знака без знака

...