Звучит так, как будто FreeImage теряет память, или память фрагментируется в коде, вызывающем FreeImage.В начале жизненного цикла вашего процесса все еще достаточно непрерывной памяти, и все работает нормально.Позже, вещи начинают терпеть неудачу на больших цветных изображениях.Причина, по которой именно jpegs терпят неудачу, заключается в том, что образ памяти цветного изображения всегда занимает не менее 24 бит на пиксель (вероятно, 32 бита), даже если его размер на диске намного меньше.Ваши изображения TIFF, вероятно, черно-белые и требуют только 1 бит на пиксель.
Если освобождается не вся память для каждого обработанного изображения (в FreeImage.dll или в вашей собственной программе), это создает проблему в непрерывно работающем процессе, даже если объем используемой памяти остаетсякрошечный.Проблема заключается в том, что память станет фрагментированной, и ОС не сможет переместить фрагменты в пространство памяти одного процесса.Для загрузки больших изображений требуются большие непрерывные блоки памяти, а во фрагментированной памяти больше не может быть достаточно больших свободных «дырок», даже если общего свободного пространства все еще достаточно.Простой обходной путь - создать отдельный процесс для каждого обрабатываемого изображения, а основной процесс должен выполнять только управление задачами.Это, однако, делает вашу программу немного более сложной и может вызвать проблемы со стабильностью, если возможно зависание рабочего процесса.