Итак, я работаю над движком игры в 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 и связать его как статически, так и динамически, но все равно никакой разницы.
Итак, мой вопрос: есть ли что-нибудь, что я могу сделать, чтобы отладить это дальше, , если есть решение?
На основе вашего кода изображение должно находиться в текущем рабочем каталоге приложения, пытаясь его открыть. Начальный рабочий каталог может отличаться в зависимости от того, как вы запускаете приложение (например, от отладчика или проводника). Вы хотите проверить и убедиться, что все в порядке. –
@CaptainObvlious Я нашел решение и отправил ответ. У меня был образ как в исходном каталоге, так и в дистрибутиве, но у визуальной студии была проблема с этим. – ShadoWalkeR