Войти
X-Time CommunityСтатьи

dpImage Coder - простой пример

Автор:

Для примера использования dpImage Coder попробуем дополнительно разжевать часть примера из состава пакета dpImage.

Условимся на том, что изображение уже загружено. Откуда и как - не важно. Важно, где оно теперь. Скажем, пусть изображение храниться в *pImage. Замечу, так же, что изображение должно храниться обязательно в 32-битном формате с цветовой раскладкой по схеме "красный-зеленый-синий-альфа".

Наша задача сохранить данное изображение в формате dpImage.

Приступим...

Шаг 1: Нужно подключить библиотеку. Это уж само собой... Делаем примерно так:

#include <dpICoder.h>
#pragma comment (lib, "dpICoder.lib")

В принципе строку #pragma comment (lib, "dpICoder.lib") можно не писать, если lib вы включите в линковку проекта.

Шаг 2: Регистрация класса и очистка заголовочной структуры.

CDPICODER dpic;
dpic.Reset();
DPICODER_ERROR dperr=0L;

Шаг 3: Указываем разрешение изображения.

dpic.dpIhdr.Resolution.Width=ширина;
dpic.dpIhdr.Resolution.Height=высота;
dpic.dpIhdr.ColorTheme.bpp=24;
dpic.dpIhdr.ColorTheme.type=DPICOLORTYPE24_R8G8B8;
dpic.dpIhdr.ColorTheme.theme=DPICOLORTHEME_BGRA;

Первые две строки понятны без лишних комментариев. 3-я строка тоже ясна. А далее вот что:

dpic.dpIhdr.ColorTheme.type служит для указания битовой раскладки цвета, т.е. сколько бит используется на конкретный компанент цвета. Мы в примере используем DPICOLORTYPE24_R8G8B8, что значит, что на каждый компанент будет использовано по 8 бит. Другие значения перечислены в dpICoder.h как DPICOLORTYPE24 для 24 битной глубины и DPICOLORTYPE32 для 32 битной.

dpic.dpIhdr.ColorTheme.theme служит для указания компанентной раскладки цвета, т.е. в каком порядке следуют компаненты. В нашем случае будет порядок "синий-зеленый-красный-альфа". Другие значения смотрите в DPICOLORTHEME.

В DPICOLORTHEME используются следующие индексы: R - красный, G - зеленый, B - синий, A - альфа-канал, X - не используется, M - маска.

Шаг 4: Устанавливаем кодер и кодируем изображение.

dperr=dpic.AddCoder(DPICODER_ModeB1);
if(dperr!=DPICODER_ERROR_OK)
{
... // Ошибка!
}

dpic.dpIhdr.CoderList.quality=80;

dperr=dpic.CompressImage(pImage);
if(dperr!=DPICODER_ERROR_OK)
{
... // Ошибка
}

Все кодеры перечислены в DPICODER.

dpic.dpIhdr.CoderList.quality - устанавливает качество изображения, а не сжатия. Чем выше этот показатель, тем меньше "шума" будет в полученом изображение. Данный параметр применим только к кодерам группы B, для группы А этот параметр можно не указывать.

Шаг 5: Сохраняем результат в файл.

dperr=dpic.CreateFile("myimage.dpi");
if(dperr!=DPICODER_ERROR_OK) { ... /* Ошибка */ }

dperr=dpic.WriteHeader();
if(dperr!=DPICODER_ERROR_OK) { ... /* Ошибка */ }

dperr=dpic.WriteData();
if(dperr!=DPICODER_ERROR_OK) { ... /* Ошибка */ }

dpic.CloseFile();

Здесь, в общем-то нечего объяснять. Порядок всегда такой, как показан. Параметров указывать ни каких не надо.

Вот и всё. Есть вопросы, замечания, дополнения - пишите.

Всем приятного использования dpImage.

С уважением,
X-Ray Spider.

21 ноября 2008