我试图将jpeg等图像文件加载到vw中作为应用程序的一部分。这似乎需要很长时间,有时甚至会导致vw崩溃。该图像大约3.5MB,是一个简单的JPEG图片。这是导致问题的原因:使用VisualWorks加载图像(图形)速度很慢
ImageReader fromFile:'pic.jpg'.
此操作大约需要5-10秒才能完成。它发生在32位和64位的项目中。
有关我如何解决此问题的任何想法或建议? pharo中的相同的东西似乎工作正常。
谢谢!
我试图将jpeg等图像文件加载到vw中作为应用程序的一部分。这似乎需要很长时间,有时甚至会导致vw崩溃。该图像大约3.5MB,是一个简单的JPEG图片。这是导致问题的原因:使用VisualWorks加载图像(图形)速度很慢
ImageReader fromFile:'pic.jpg'.
此操作大约需要5-10秒才能完成。它发生在32位和64位的项目中。
有关我如何解决此问题的任何想法或建议? pharo中的相同的东西似乎工作正常。
谢谢!
尝试直接调用JPEGImageReader:
JPEGImageReader FROMFILE:“pic.jpg”
如果是这样的快,那么经济放缓是在寻找合适的图像阅读器使用的文件。你已经安装了哪些ImageReader,以及它们如何实现类方法canRead:?
如果JPEGImageReader仍然很慢,那么我们可以从那里调查。
我试过了。有趣的现象是,我得到以下错误:'无法确定图像文件的类型'。 –
上面直接使用JPEGImageReader的调用不起作用,因为调用仅在子类中查找。您可以使用AT Profiler来分析加载操作,以查看大部分时间是在哪里进行的?正如Karsten所说,这可能是图像解压缩算法中的一些问题。但是,总的来说,我并没有发现JPEG解压缩的速度与您所报告的一样慢。 –
如果您可以提供您正在尝试阅读的JPEG文件,将有助于确定问题。 –
ImageReader将自动选择正确的子类,如JPEGImageReader。挑选这个子类并不是很慢的部分;解码JPG数据是。
与PNG不同,jpeg文件不使用zip压缩,而是使用离散余弦变换(请参阅https://en.wikipedia.org/wiki/JPG#JPEG_compression)。这种压缩需要大量的数字运算,这在VisualWorks中比在C中慢。另一方面,PNG阅读器使用Zlib在C中完成数字运算部分,这就是为什么它更快。
您可以使用开罗或GDI或其他任何C-API来提高速度。
可以想象,为该项目添加的图像阅读器在canBeRead中使用了低效测试。这就是我问的原因。你是正确的,这个问题更可能是压缩问题。 –
顺便说一句,这是使用VW 7.10。我可能会在另一台计算机上安装较旧的安装,稍后再尝试安装。 –