2010-10-14 52 views
0

我需要加載批量的圖像文件並更改它們的尺寸。我通過C++中的FreeImage.dll來完成它。每批都包含JPG和TIF文件。問題是EXE處理第一批准確,但進一步批量它開始跳過一些文件,特別是JPG文件。FreeImage dll也不能用於批處理

我試圖在每批之前和之後初始化和取消初始化FreeImage,但它仍然不起作用。

有人可以建議我這樣做嗎?即使我需要使用其他一些免費的圖像處理庫,對我來說也沒問題。

+0

發佈代碼? – 2010-10-14 04:55:17

+0

結果是否一致?它能夠單獨處理一個這樣的圖像? – ruslik 2010-10-14 04:57:33

回答

0

聽起來好像FreeImage泄漏內存或內存在調用FreeImage的代碼中被分割。在流程的整個生命週期的早期,足夠的連續內存仍然可用,並且一切正常。之後,在較大的彩色圖像上開始失敗。具體jpegs失敗的原因是因爲彩色圖像的內存圖像始終需要至少24位/像素(可能是32位),即使它在磁盤上的大小要小得多。你的tiff圖像可能是黑白的,然後每像素只需要1位。

如果不是每個已處理圖像的內存都釋放(FreeImage.dll或自己的程序中),即使持續運行的進程中出現問題,即使仍在使用的內存量很小。問題是內存將變成碎片,操作系統無法在單個進程的內存空間中重新定位碎片。爲了加載大圖像,需要大量連續的內存塊,並且在碎片內存中可能不再有足夠大的空閒「空洞」,即使整個空閒空間仍然足夠。一個簡單的解決方法是爲每個要處理的圖像產生一個單獨的進程,並讓主進程只進行任務管理。但是,這會使您的程序稍微複雜一點,並且如果工作進程可能掛起,可能會導致穩定性問題。