0

Итак, я работаю над движком игры в Visual Studio 2013, и я попытался использовать библиотеку FreeImage v3.17, однако, пытаясь использовать библиотеку на простом примере, предоставленном самой либой, программа не удалось загрузить изображение, если я не запустил его непосредственно из каталога сборки. Я также тестировал изображение различных форматов, созданных с помощью другого программного обеспечения.Библиотека FreeImage не работает с отладчиком Visual Studio 2013?

Более конкретно, используя только код ниже, перешагнув код, FreeImage, по-видимому, правильно угадает тип файла от вызова до FreeImage_GetFIFFromFilename() (т. Е. fif == FIF_PNG и т. Д.). Впоследствии вызов FreeImage_FIFSupportsReading(fif) возвращает true, затем пытается назначить dib, но FreeImage_Load() всегда возвращает NULL.

Смотрите комментарии с // >:

int main(int argc, char ** argv) 
{ 
    const char* filename = "test.png"; 

    //image format 
    FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; 
    //pointer to the image, once loaded 
    FIBITMAP *dib(0); 
    //pointer to the image data 
    BYTE* bits(0); 
    //image width and height 
    unsigned int width(0), height(0); 
    //OpenGL's image ID to map to 
    GLuint gl_texID; 

    //check the file signature and deduce its format 
    fif = FreeImage_GetFileType(filename, 0); 
    //if still unknown, try to guess the file format from the file extension 
    if (fif == FIF_UNKNOWN) 
     fif = FreeImage_GetFIFFromFilename(filename); // >fif is assigned here correctly 
    //if still unkown, return failure 
    if (fif == FIF_UNKNOWN) 
     return false; 

    //check that the plugin has reading capabilities and load the file 
    if (FreeImage_FIFSupportsReading(fif)) 
     dib = FreeImage_Load(fif, filename); // >call retruns NULL every time 
    //if the image failed to load, return failure 
    if (!dib) 
     return false; // >Exits here due to failure 

    //retrieve the image data 
    bits = FreeImage_GetBits(dib); 
    //get the image width and height 
    width = FreeImage_GetWidth(dib); 
    height = FreeImage_GetHeight(dib); 
    //if this somehow one of these failed (they shouldn't), return failure 
    if ((bits == 0) || (width == 0) || (height == 0)) 
     return false; 

    // >Can't reach this from VS 
    std::cout << width << ", " << height << std::endl; 
    std::cin.get(); 

    return 0; 
} 

Это происходит только тогда, когда я запускаю программу с отладчиком VS, поэтому мои подозрения в том, что каким-то образом отладки кучи виноват. Я попытался установить _NO_DEBUG_HEAP на 1 и попробовать без отладки, но нет никакой разницы в поведении программы. Я также попытался перекомпилировать lib и связать его как статически, так и динамически, но все равно никакой разницы.

Итак, мой вопрос: есть ли что-нибудь, что я могу сделать, чтобы отладить это дальше, , если есть решение?

+1

На основе вашего кода изображение должно находиться в текущем рабочем каталоге приложения, пытаясь его открыть. Начальный рабочий каталог может отличаться в зависимости от того, как вы запускаете приложение (например, от отладчика или проводника). Вы хотите проверить и убедиться, что все в порядке. –

+0

@CaptainObvlious Я нашел решение и отправил ответ. У меня был образ как в исходном каталоге, так и в дистрибутиве, но у визуальной студии была проблема с этим. – ShadoWalkeR

ответ

0

Найдено решение. Проблема заключалась в том, что при использовании отладчика Visual Studio смогла прочитать тип файла из исходной папки или в папке сложения, но не в то же время. Решение заключалось в том, чтобы мои файлы были либо в исходном каталоге (для отладчика), либо в каталоге build, но не оба.