Сегодня ночью взялся за доработку вьювера изображений – Simple Viewer. Давно хотелось отказаться от использования Gfl SDK. Эта библиотека является частью проекта XnView. Библиотека хорошая и удобная, хорошо документированная. Поддерживает более 100 графических форматов. Но она проприетарная.
Перейти от непосредственной работы с Xlib к OpenGL, что повысило бы скорость работы вьювера за счет аппаратного ускорения. Так же добавил возможность скроллинга и изменения масштаба с помощью мышки.
На данный момент использую Imlib2 для загрузки и декодирования изображений. Но т.к. Imlib2 не смог загрузить тестовый jpeg, созданный в GIMP, то мой выбор остановился на libjpeg. Для анимированных gif использую giflib.
Итак, что получилось в итоге, плюсы:
- создание списка файлов и поиск позиции, с которой начался просмотр;
- отказ от Gfl SDK в пользу Imlib2, libjpeg, libpng, giflib, libtiff;
- поддержка JPEG через libjpeg;
- поддержка PNG через libjpng;
- поддержка GIF через giflib;
- поддержка TIFF через libtiff;
- поддержка PSD (еще не все фичи формата реализовал);
- поддержка ICO (реализовал так же поддержку фреймов в формате PNG);
- использование OpenGL;
- отображение координаты и цвета пикселя под курсором (ключ командной строки -p или клавиша P);
- разбиение больших изображений по нескольким текстурам;
- быстрое скролирование изображения с помощью клавиатуры или мышки;
- произвольное масштабирование изображения с помощью клавиатуры (- / +) или колеса мышки;
- корректное автоматическое масштабирование изображений, не вмещающихся в окно вьювера;
- отображение прогресса загрузки больших изображений;
- возможность просмотра многостраничных изображений (клавиши PgUp / PgDn)
К сожалению есть и минусы:
- анимированные GIF все еще не поддерживаются (но есть возможность просмотра отдельных фреймов);
нет поддержки многостраничных изображенийсделана поддержка для TIFF, GIF, ICO;нет никакой поддержки 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
Добрый человек с LOR скрывающийся под ником AnDoR сделал ebuild для вьювера – simpleviewer-gl-9999.ebuild. Большое ему за это спасибо.
Предыдущая версия Simple Viewer.
Comments
Leave a comment Trackback