Загрузка изображений (графики) с VisualWorks очень медленная

Я пытаюсь загрузить файлы изображений, такие как JPEG в VW, как часть приложения. Это, кажется, занимает очень много времени, а иногда даже вылетает VW. Изображение имеет примерно 3,5 МБ и представляет собой простую картинку в формате JPEG. Вот что вызывает проблему:

ImageReader fromFile:'pic.jpg'.

Эта операция занимает около 5-10 секунд. Это происходит как в 32, так и в 64-битных проектах.

Какие-нибудь идеи или предложения относительно того, как я могу решить эту проблему? То же самое в фаро, кажется, работает хорошо.

Спасибо!

2 ответа

ImageReader автоматически выберет правильный подкласс, такой как JPEGImageReader. Выбор подкласса не является медленной частью; декодирование данных JPG.

Файл jpeg, в отличие от PNG, не использует сжатие zip, а вместо этого использует дискретные косинусные преобразования (см. https://en.wikipedia.org/wiki/JPG). Это сжатие требует большого сокращения чисел, которое медленнее в VisualWorks, чем в C. С другой стороны, программа чтения PNG использует Zlib для выполнения обработки чисел в C, поэтому она намного быстрее.

Вы можете использовать Cairo или GDI или любой другой C-API, который у вас есть под рукой, чтобы ускорить это.

Попробуйте вызвать JPEGImageReader напрямую:

JPEGImageReader fromFile: 'pic.jpg'

Если это быстро, то замедляется поиск подходящего устройства чтения изображений для файла. Какие ImageReaders у вас установлены и как они реализуют метод класса canRead:?

Если JPEGImageReader все еще медленный, то мы можем исследовать оттуда.

Другие вопросы по тегам