Загрузка изображений (графики) с 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 все еще медленный, то мы можем исследовать оттуда.