<chapter id="internals">

<chapterinfo>
<authorgroup>
<author>&Dmitry.Baryshev;</author>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
</authorgroup>

<date>2007-03-10</date>
<releaseinfo>0.3</releaseinfo>
</chapterinfo>

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

<sect1 id="internals-opengl">
<title>Использование OpenGL.</title>
<para>На данный момент имеется возможность использовать несколько различных способов отображения изображений. В качестве движков можно использовать OpenGL, MIT-SHM, Qt, gdk-pixbuf с MMX оптимизацией. Главное их отличие друг от друга - это скорость. Например, отображение изображений с помощью средств Qt будет работать очень медленно (даже в случае наличия собственной MMX оптимизации), или же gdk-pixbuf для GTK приложений будет работать приемлимо для среднего размера изображений.</para>

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

<sect1 id="internals-libs">
<title>Свои библиотеки</title>

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

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

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

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

<sect2 id="internals-specific">
<title>Работа &kappname; с библиотеками</title>

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

<orderedlist>
<listitem><para>&kappname; практически не знает, какой кодек будет использован для декодирования изображения - это определяется динамически.</para></listitem>
<listitem><para>&kappname; практически не знает, сколько страниц в декодируемом изображении и является ли оно анимацией - это определяется динамически.</para></listitem>
<listitem><para>Благодаря поддержке декодирования отдельных строк, &kappname; показывает изображения прогрессивно, т.е. по мере декодирования.</para></listitem>
</orderedlist>
</para>

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

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

<screenshot>
<screeninfo>Информация по найденным кодекам</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="plugins_info.png" format="PNG" />
</imageobject>
<textobject><phrase>Информация по найденным кодекам</phrase></textobject>
</mediaobject>
</screenshot>

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

</sect2>
</sect1>

</chapter>
