Simple Viewer GL

Simple Viewer GL Небольшой вьювер изображений использующий OpenGL. Пользуюсь этим вьювером в повседневной работе для быстрого просмотра списка изображений, определения параметров области, которую занимает спрайт на текстуре.

Поддерживаемые форматы: PSD, PNG (libpng), JPEG (libjpeg), TIFF (tiff, многостраничный), ICO (поддержка фреймов в формате png), DDS, GIF (giflib, с поддержкой анимации и возможностью просмотра каждого фрейма отдельно), BMP (частичная поддержка), TARGA, PNM, XWD, XPM, SCR (формат экрана ZX-Spectrum), WebP, OpenEXR.

Основные возможности:

  • поддерживаются встроенные в файл цветовые ICC-профили;
  • отображение EXIF или иной информации, внедренной в файл (клавиша <e>);
  • загрузка изображений в отдельном потоке + индикатор процесса загрузки;
  • создание списка файлов и поиск позиции, с которой начался просмотр;
  • поддержка GIF-анимации;
  • отображение координаты и цвета пикселя под курсором (ключ командной строки -p или клавиша P);
  • возможность выделения части изображения рамкой (удобно для определения координат и позиции области);
  • быстрое скролирование изображения с помощью клавиатуры или мышки;
  • произвольное масштабирование изображения с помощью клавиатуры ( / + / 1..0);
  • корректное автоматическое масштабирование изображений, не вмещающихся в окно вьювера;
  • возможность просмотра многостраничных изображений (клавиши PgUp / PgDn)
  • использование OpenGL;
  • разбиение больших изображений по нескольким текстурам;

 
Без минусов не обошлось:

  • нет возможности переназначить “горячие” клавиши (планирую сделать);
  • изображения загруженные с помощью Imlib2 не имеют информации о кол-ве бит на пиксель (постепенно избавляюсь от этой библиотеки в пользу собственной реализации загрузчиков);

Загрузка и сборка
В данный момент исходные коды Simple Viewer GL доступны в Git на Bitbucket.org.
 


35 comments

  • Pingback: Tweets that mention Simple Viewer GL - Ugolnik's Family blog -- Topsy.com

  • Просто потрясающая программа, это то, что я давно искал. Лёгкий многоформатный просмотрщик с ускорением, без привязки к тулкитам и тем более ДЕ, клавишное управление без назойливого и занимающего ценное место гуя.

    Небольшой багрепорт: почему-то не работает увеличение картинки до размера окна, ни через опцию -s, ни через горячую клавишу.

    Пожелание: сделать настраиваемые горячие клавиши или хотя бы для начала сделать дополнительную умолчальную клавишу «f» для переключения полноэкранного режима.

    Под впечатлением от программы создал билд для арча — http://aur.archlinux.org/packages.php?ID=38746 . Может быть добавите где-то в тексте описания, если интересно.

    С большим интересом буду следить за развитием программы. Спасибо вам за ваш труд.

    • Небольшой багрепорт: почему-то не работает увеличение картинки до размера окна, ни через опцию -s, ни через горячую клавишу.”

      Это не баг. Опция scale вписывает в окно вьювера только не вмещающиеся картинки. Если картинка меньше размеров окна, то ее размеры не меняются.
      Но есть кнопки “+” и “-” и колесо мыши.

      “Пожелание: сделать настраиваемые горячие клавиши или хотя бы для начала сделать дополнительную умолчальную клавишу «f» для переключения полноэкранного режима.”

      Это в планах.

      “С большим интересом буду следить за развитием программы. Спасибо вам за ваш труд.”

      Приятно слышать, что утилита оказалась полезной еще кому то.

      • >Это не баг. Опция scale вписывает в окно вьювера только не вмещающиеся картинки. Если картинка меньше размеров окна, то ее размеры не меняются.

        Но в принципе увеличение картинки под размер окна реализуемо? Иногда бывает очень полезно, хотелось бы видеть.

        >Приятно слышать, что утилита оказалась полезной еще кому то.

        Думаю в своей целевой области она вне конкуренции, так что популярность, по крайней мере в узких кругах, не за горами (говорю как человек, недавно переглядевший всё, что только нашёл в области легковесных смотрелок :) )

        • “Но в принципе увеличение картинки под размер окна реализуемо? Иногда бывает очень полезно, хотелось бы видеть.”

          Реализовать то можно. Нужно подумать, как это правильно оформить.

          “Думаю в своей целевой области она вне конкуренции, так что популярность, по крайней мере в узких кругах, не за горами (говорю как человек, недавно переглядевший всё, что только нашёл в области легковесных смотрелок :)”

          В свое время я тоже перебрал много вьюверов. Ни один из них не подходил мне по какой-либо причине, так и появился Simple Viewer.

  • Очень нравится Ваша программа — давно пользуюсь sview, сейчас пробую sviewgl.

    Хотелось бы уточнить один момент.
    Старая версия при открытии файла, помещающегося на экране, окно открывалось по размеру изображения.
    Сейчас окно всегда одного размера, и изображения туда чаще всего не помещаются, приходится запускать программу в полноэкранном режиме.

    Регрессия или фича?

      • А в полноэкранный режим вы переключаетесь средствами вьювера (по клавише Enter) или используются возможности Metacity?

        • По Enter (совсем вылетело из головы — у меня не GNOME, а IceWM и, соответственно, Metacity нет).

          Вначале хотелось запускать sviewgl с ключом -f, но он у меня не работает.

          • Посмотрел код – действительно, параметр “-f” хоть и обрабатывается, но не используется для инициализации.
            Пофикшу позже.

    • Это фича. Предполагается, что размером и положением окна в Linux должен заниматься оконный менеджер, а не программа.
      Верну ли я старое поведение я еще не решил.

      • Возможно, я что-то не понимаю, но как оконный менеджер может определить нужный размер окна, если программа этого ему не сообщит?
        Неужели в “тяжёлых” средах типа GNOME или KDE это действительно работает?!!

        Впрочем, что бы Вы не решили, sview останется моей любимой “смотрелкой” под linux.

        • Оконный менеджер не может этого знать. Дело в том, что только пользователь (через WM) должен решать, где должно располагаться окно и какого оно должно быть размера. А приложение должно отталкиваться о того размера, который ей сообщил WM.

          • Необходимость всё делать руками и решать для каждого окна, где и как оно должно располагаться, иногда весьма утомительна…
            По крайней мере мне очень хотелось бы иметь ключ, возвращающий старое поведение.

            Хотя, конечно же, решать Вам.

  • Зачем решать для каждого окна? Только для нужных окон/приложений прописать правила.

    • Упс, не в ту ветку попал комментарий…

      “Прошу прощения за глупый вопрос, но как?
      И, это глобальная Xorg’овская настройка или зависит от среды?”

    • Зависит от WM. Про IceWM ничего не знаю, т.к. сам использую Ion3.

  • strafer

    Решил тут после долгого времени обновиться. При сборке выдаёт следующее:
    fileslist.cpp: В функции-члене «const char* CFilesList::GetName(int)»:
    fileslist.cpp:191:51: ошибка: нет декларации «unlink» в этой области видимости

  • ramwoolf

    Пытаюсь использовать imlib2 у себя в проекте. В CMakeLists.txt возникает ругательство на find_package(IMLIB2):
    CMake Warning at CMakeLists.txt:16 (find_package):
    By not providing “FindIMLIB2.cmake” in CMAKE_MODULE_PATH this project has
    asked CMake to find a package configuration file provided by “IMLIB2”, but
    CMake did not find one.

    Could not find a package configuration file provided by “IMLIB2” with any
    of the following names:

    IMLIB2Config.cmake
    imlib2-config.cmake

    Add the installation prefix of “IMLIB2” to CMAKE_PREFIX_PATH or set
    “IMLIB2_DIR” to a directory containing one of the above files. If “IMLIB2”
    provides a separate development package or SDK, be sure it has been
    installed.

    CMAKE_PREFIX_PATH устанавливал, IMLIB2_DIR – тоже, все без толку. Может есть что неочевидное (для меня по крайней мере), что заставляет-таки собраться проект с IMLIB2?

  • Добрый день, сколько лет, сколько зим :)

    Судя по датам в репозитории вы что-то меняете время от времени, хорошо, что дело движется.
    Пост нуждается в обновлении, нычне обновление репы делается через
    svn checkout http://svn.code.sf.net/p/simpleviewer/code/ simpleviewer-code

    Есть у меня и багрепорт по сборке, пришлось сваять вот такой вот патчик
    — formatgif.cpp^I2014-05-21 11:51:01.000000000 +0600$
    +++ formatgif1.cpp^I2014-05-21 11:36:51.000000000 +0600$
    @@ -26,7 +26,7 @@$
    }$
    fclose(m_file);$
    $
    – GifFileType* file = DGifOpenFileName(filename);$
    + GifFileType* file = DGifOpenFileName(filename, NULL);$
    if(file == 0)$
    {$
    std::cout << "Error Opening GIF image" << std::endl;$

    Т.к. в gif_lib.h функция объявлена с двумя аргументами.

    Обновил PKGBUILD https://aur.archlinux.org/packages/simpleviewergl-svn

    Планируется ли поддержка TGA? Есть ли в ближайших планах реализация масштабирования мелких изображений до размеров окна?

    • Вьювер давно переехал на BitBucket, дойдут руки до исправления текущих регрессий, опубликую линк.

    • Дошли руки до вьювера, исправил баги, добавил новые фичи и новые форматы. Если не сложно, обновите билд. Вьювер доступен в Git на BitBucket:
      git clone git@bitbucket.org:andreyu/simple-viewer-gl.git

      • $ git clone git@bitbucket.org:andreyu/simple-viewer-gl.git
        Cloning into ‘simple-viewer-gl’…
        Warning: Permanently added the RSA host key for IP address ‘131.103.20.168’ to the list of known hosts.
        Permission denied (publickey).
        fatal: Could not read from remote repository.

        Please make sure you have the correct access rights
        and the repository exists.

          • Да, так масло пошло, дальше проблема со сборкой

            $ mkdir build
            $ cd build
            $ cmake ../
            CMake Error: The source directory “…” does not appear to contain CMakeLists.txt.

            Многоточие вместо реального пути, куда клонировал сырцы. Там такого файла действительно нет.

  • Если сборка под Linux, то так:

    $ mkdir build
    $ cd build
    $ cmake ../projects/linux

    Но я делаю просто make linux в корне вьювера.

  • А, ну я просто следовал инструкциям в INSTALL, надо значит там текст обновить.

    Кстати, наверное цель наверное не linux, а all.

    И опять вылезла эта ошибка при сборке с gif’ом http://pastebin.com/MrU0031m

    • Да, INSTALL подправил, попадет в следующий билд.
      Точно, цель all.

      По поводу giflib, какая версия библиотеки у вас? Я использую версию 4.2.3, там такой прототип функции:
      GifFileType *DGifOpenFileName(const char *GifFileName);
      Один параметр – имя файла.

      • У меня 5.1.0 . Да, видимо дело в этом. Значит сделаю тогда патч.

      • Где сейчас можно узнать идентификатор версии? Раньше я пользовался ревизией svn, сейчас у git’а какие-то неудобоваримые хеши.

        • В master ветке есть tag для версии. Текущая версия v2.4. Можно по тегу забирать нужную версию исходников.
          Или брать head из девелоперской ветки development, но это уже для маньяков :)

Leave a Reply

Your email address will not be published. Required fields are marked *