&Dmitry.Baryshev;
2007-03-10
0.3

# Отличие &kappname; от других просмотрщиков. Свои библиотеки.

## Использование OpenGL.

На данный момент имеется возможность использовать несколько различных способов отображения изображений. В качестве движков можно использовать OpenGL, MIT-SHM, Qt, gdk-pixbuf с MMX оптимизацией. Главное их отличие друг от друга - это скорость. Например, отображение изображений с помощью средств Qt будет работать очень медленно (даже в случае наличия собственной MMX оптимизации), или же gdk-pixbuf для GTK приложений будет работать приемлимо для среднего размера изображений.

Использование OpenGL в качестве движка просмотра изображений имеет свои преимущества и недостатки. В качестве преимущества можно упомянуть большую скорость манипулирования изображением (увеличение, уменьшение, повороты, сдвиги...), недоступную другим способам отображения. В противовес этому, как недостаток можно упомянуть наоборот очень низкую скорость манипулирования изображением, которое полностью не помещается в видеопамять Вашей видеокарты. Например, с большой вероятностью изображение 9600x9600 не поместится в видеопамять видеокарты среднего класса, как моей GF MX440, и масштабирование в окне просмотра будет работать крайне медленно. Таким образом, &kappname; отлично подходит для просмотра домашних изображений - иллюстраций стандартных размеров, сканированных листов A4, фотографий с цифрового фотоаппарата и т.п., но будет работать с затруднениями с огромными изображениями.

## Свои библиотеки

Почти во всех программах просмотра изображений для декодирования используются сторонние библиотеки. Примером могут служить такие библиотеки как imlib (Image Magic) и Qt. На первый взгляд, преимущества такого способа очевидны - это перекладывание головной боли по декодированию изображений на другие библиотеки, вообще абстрагируясь от низкого уровня работы с изображениями, альфа каналами, битовыми масками, RLE кодированием и прочего. Но у этого способа есть несколько очевидных недостатков. К ним причисляется, во-первых, частичное отсутствие расширяемости набора кодеков изображений. Во-вторых, это зависимость кодеков от больших (а иногда очень больших) библиотек, типа Qt. В-третьих, отсутствие поддержки анимаций, типа GIF, FLI или MNG. В-четвёртых, отсутствие возможности декодирования отдельных строк.

Исходя из всех этих недостатков, было решено отказаться от помощи сторонних библиотек и разработать собственные библиотеки, которые могли бы не зависеть от других библиотек, кроме стандартных и требуемых самими кодеками (такие, как libsvg, libmng и др.), загружаться динамически, быть полностью расширяемыми, поддерживать декодирование строк и анимацию. Эти библиотеки получили название &klibname;.

На момент написания данной документации &klibname; поддерживал 51 формат изображений, включая PNG, JPEG, Photoshop PSD, AutoCAD DXF, WMF, SVG, MNG и GIF. Имеются также кодеки для поддержки файлов шрифтов TTF, анимаций FLI и X-овых курсоров.

&klibname; поддерживает также текстовые поля (комментарии и др.), сохраняемые в некоторых типах изображений. Например, PNG и GIF кодеки способны читать комментарии из данных типов файлов.

### Работа &kappname; с библиотеками

Благодаря вышеуказанным свойствам библиотек &klibname;, &kappname; приобретает следущие особенности:

1. &kappname; практически не знает, какой кодек будет использован для декодирования изображения - это определяется динамически.

2. &kappname; практически не знает, сколько страниц в декодируемом изображении и является ли оно анимацией - это определяется динамически.

3. Благодаря поддержке декодирования отдельных строк, &kappname; показывает изображения прогрессивно, т.е. по мере декодирования.

Когда &kappname; загрузил все найденные библиотеки (используя Qt класс QLibrary), появляется возможность отображать любые поддерживанмые типы изображений (как статичных, так и анимированных). Когда пользователь выбирает изображение в навигаторе, &kappname; по MIME типу либо расширению файла определяет, поддерживается ли данный формат изображения. Если данный формат поддерживается, то, используя найденную библиотеку, &kappname; приступает к декодированию изображения и отображению его в окне просмотра.

Информацию о всех найденных кодеках можно просмотеть в диалоге Информация о плагинах, как показано на скриншоте.

Информация по найденным кодекам
Информация по найденным кодекам

Подсказка: слева от имени кодека может отображаться значёк настроек, как показано на рисунке для кодека GIMP XCF. Это означает, что данный кодек может быть настроен для работы с различными параметрами. Например, для кодека GIMP XCF можно настроить цвет фона для прозрачных изображений.