Сегодня ночью взялся за доработку вьювера изображений – Simple Viewer. Давно хотелось отказаться от использования Gfl SDK. Эта библиотека является частью проекта XnView. Библиотека хорошая и удобная, хорошо документированная. Поддерживает более 100 графических форматов. Но она проприетарная.
Перейти от непосредственной работы с Xlib к OpenGL, что повысило бы скорость работы вьювера за счет аппаратного ускорения. Так же добавил возможность скроллинга и изменения масштаба с помощью мышки.
На данный момент использую Imlib2 для загрузки и декодирования изображений. Но т.к. Imlib2 не смог загрузить тестовый jpeg, созданный в GIMP, то мой выбор остановился на libjpeg. Для анимированных gif использую giflib.
Итак, что получилось в итоге, плюсы:
- создание списка файлов и поиск позиции, с которой начался просмотр;
- отказ от Gfl SDK в пользу Imlib2, libjpeg, giflib, libpng;
- поддержка JPEG через libjpeg;
- поддержка PNG через libjpng;
- поддержка GIF через giflib;
- поддержка PSD (еще не все фичи формата реализовал);
- использование OpenGL;
- определение максимального размера текстуры;
- разбиение больших изображений по нескольким текстурам;
- быстрое скролирование изображения с помощью клавиатуры или мышки;
- произвольное масштабирование изображения с помощью клавиатуры или колеса мышки;
- корректное автоматическое масштабирование изображений, не вмещающихся в окно вьювера;
- отображение прогресса загрузки больших изображений;
К сожалению есть и минусы:
- библиотека Imlib2 поддерживает существенно меньшее кол-во форматов (архитектура вьювера позволяет достаточно просто добавлять поддержку новые форматов);
- анимированные GIF все еще не поддерживаются (планирую сделать);
- нет поддержки многостраничных изображений (планирую сделать);
нет никакой поддержки PSD; есть, сегодня ночью написал первую реализацию;
- нельзя посмотреть EXIF (планирую сделать);
- нет возможности переназначить “горячие” клавиши (планирую сделать);
- нет информации о количестве бит на канал изображения (это ограничение Imlib2);
- нет возможности повернуть изображение (планирую сделать);
- у меня есть изображение в формате jpeg (созданное для теста в GIMP),
которое Imlib2 не может загрузить, хотя libjpeg спокойно его грузил; перешел на libjpeg – теперь проблем с JPEG нет;
В данный момент исходные коды
Simple Viewer GL доступны на
SourceForge.net в SVN. Забрать последнюю версию исходных кодов можно следующей командой:
svn co https://simpleviewer.svn.sourceforge.net/svnroot/simpleviewer simpleviewer
Предыдущая версия Simple Viewer.