2014-01-19 56 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中使用了低效测试。这就是我问的原因。你是正确的,这个问题更可能是压缩问题。 –