FreeImage がメモリをリークしているか、FreeImage を呼び出すコードでメモリが断片化されているように聞こえます。プロセスの有効期間の早い段階では、十分な連続したメモリがまだ利用可能であり、すべてが正常に動作します。後で、大きなカラー画像で失敗し始めます。特に jpeg が失敗する理由は、ディスク上のサイズがはるかに小さい場合でも、カラー イメージのメモリ イメージが常に 1 ピクセルあたり少なくとも 24 ビット (おそらく 32 ビット) かかるためです。あなたの tiff 画像はおそらく白黒で、1 ピクセルあたり 1 ビットしか必要としません。
処理された各イメージのすべてのメモリが (FreeImage.dll または独自のプログラムで) 解放されていない場合、使用中のメモリの量がわずかであっても、継続的に実行されているプロセスで問題が発生します。問題は、メモリがフラグメント化され、OS がフラグメントを単一プロセスのメモリ空間に再配置できないことです。大きな画像をロードするには、大きな連続したメモリ ブロックが必要であり、断片化されたメモリでは、全体的な空き領域がまだ十分であっても、十分な大きさの空き「穴」がない場合があります。簡単な回避策は、処理するイメージごとに個別のプロセスを生成し、メイン プロセスでタスク管理のみを行うことです。ただし、これによりプログラムが少し複雑になり、ワーカー プロセスがハングする可能性がある場合、安定性の問題が発生する可能性があります。