2014-01-19 112 views
1

我試圖將jpeg等圖像文件加載到vw中作爲應用程序的一部分。這似乎需要很長時間,有時甚至會導致vw崩潰。該圖像大約3.5MB,是一個簡單的JPEG圖片。這是導致問題的原因:使用VisualWorks加載圖像(圖形)速度很慢

ImageReader fromFile:'pic.jpg'. 

此操作大約需要5-10秒才能完成。它發生在32位和64位的項目中。

有關我如何解決此問題的任何想法或建議? pharo中的相同的東西似乎工作正常。

謝謝!

+0

順便說一句,這是使用VW 7.10。我可能會在另一臺計算機上安裝較舊的安裝,稍後再嘗試安裝。 –

回答

0

嘗試直接調用JPEGImageReader:

JPEGImageReader FROMFILE:「pic.jpg」

如果是這樣的快,那麼經濟放緩是在尋找合適的圖像閱讀器使用的文件。你已經安裝了哪些ImageReader,以及它們如何實現類方法canRead:?

如果JPEGImageReader仍然很慢,那麼我們可以從那裏調查。

+0

我試過了。有趣的現象是,我得到以下錯誤:'無法確定圖像文件的類型'。 –

+0

上面直接使用JPEGImageReader的調用不起作用,因爲調用僅在子類中查找。您可以使用AT Profiler來分析加載操作,以查看大部分時間是在哪裏進行的?正如Karsten所說,這可能是圖像解壓縮算法中的一些問題。但是,總的來說,我並沒有發現JPEG解壓縮的速度與您所報告的一樣慢。 –

+0

如果您可以提供您正在嘗試閱讀的JPEG文件,將有助於確定問題。 –

1

ImageReader將自動選擇正確的子類,如JPEGImageReader。挑選這個子類並不是很慢的部分;解碼JPG數據是。

與PNG不同,jpeg文件不使用zip壓縮,而是使用離散餘弦變換(請參閱https://en.wikipedia.org/wiki/JPG#JPEG_compression)。這種壓縮需要大量的數字運算,這在VisualWorks中比在C中慢。另一方面,PNG閱讀器使用Zlib在C中完成數字運算部分,這就是爲什麼它更快。

您可以使用開羅或GDI或其他任何C-API來提高速度。

+0

可以想象,爲該項目添加的圖像閱讀器在canBeRead中使用了低效測試。這就是我問的原因。你是正確的,這個問題更可能是壓縮問題。 –