CxImage это C++ класс для работы с
изображениями BMP, JPEG, GIF, PNG, TIFF, MNG, и ICO. Класс
позволяет загружать, сохранять, отображать, а так
же производить преобразование от одного типа к
другому, причём делает это довольно просто и
быстро.
Почему бы не использовать доступные
библиотеки?
Существует множество хороших библиотек (OpenIL,
FreeImage, ...), которые обладают достаточными
возможностями. Однако при использовании этих
библиотек можно столкнуться с определёнными
трудностями, связанными в основном с
платформенной независимостью этих библиотек и,
как следствие - множество часто ненужных
объявлений для компилятора.
Это библиотека MFC?
Нет. В целом это обычная библиотека
предназначена для windows (из-за некоторых
специфических конструкторов и функций
закрашивания), но ядро библиотека платформенно
независимо.
Библиотека довольно большая?
Я конечно извиняюсь, но каждая библиотека JPG, PNG
и TIFF добавляет к конечному приложению около 100KB.
Для CxImage это меньше 50KB. Поэтому по необходимости
включайте в приложение только те форматы,
которые действительно необходимы.
История создания и копирайты.
Начав с класса CxDib , который включал в
себя только DIB-ы, я добавил несколько функций для
чтения изображений из файла. В сети был найден MFC
класс CImage . CImage поддерживает BMP, GIF,
PNG и JPG, однако имеет некоторые небольшие баги,
поэтому было решено объеденить CxDib со
структурой CImage для получения нового
класса CxImage. Так же были обновлены
библиотеки JPG, PNG и ZLIB.
При помощи CxImage очень просто добавлять
новые типы изображений, поэтому я добавил
библиотеку TIFF и минимальную поддержку для ICON-ок.
В заключении я добавил некоторые конструкторы
для получения изображения из глобальных HANDLE-ов
(буфер обмена windows) и объектов (ресурсы windows).
CImage это: (c)1995-1998, Alejandro Aguilar Sierra <asierra@servidor.unam.mx>
библиотека IJG JPEG это: (c)1994-1998, Thomas G. Lane.
LibPNG версия 1.0.12 это: (c)1998-2001 Glenn Randers-Pehrson
LibTIFF это: (c)1988-1997 Sam Leffler, (c)1991-1997 Silicon Graphics, Inc.
FreeImage 2.4.0 : Разработка и внедрение Floris van den Berg
(flvdberg@wxs.nl)
Более детальные авторские права находятся в
заголовочных файлах каждой библиотеки.
Как компилировать библиотеку
Перед компилированием демонстрационного
приложения необходимо скомпилировать все
библиотеки. В целом операция довольно проста:
откройте CxImgLib.dsw, выберите меню "Build/Batch
Build..." и кликните кнопку "Build".
Для компиляции потребуется несколько минут (промежуточные
файлы занимают 60MB!). Когда всё будет сделано,
запустите демонстрационное приложение.
Демонстрационное приложение показывает как:
Открыть, сохранить и отобразить изображение.
Отобразить ресурс битмап.
Помещать и извлекать картинки через буфер
обмена (clipboard)
Получать информацию о пикселях
Преобразовывать изображения
Операции и члены класса CxImage
Поддерживаемые форматы файлов
В начале основного заголовочного файла ximage.h
Вы найдёте объявления разрешённых и запрещённых
форматов: // CxImage supported formats #define CXIMAGE_SUPPORT_BMP 1
#define CXIMAGE_SUPPORT_GIF 0
#define CXIMAGE_SUPPORT_JPG 1
#define CXIMAGE_SUPPORT_PNG 1
#define CXIMAGE_SUPPORT_MNG 0
#define CXIMAGE_SUPPORT_ICO 1
#define CXIMAGE_SUPPORT_TIF 1 Если Вы измените данные выражения, то не
забудьте перекомпилировать библиотеку.
Конструкторы
CxImage()
- Создаёт пустое изображение.
CxImage(DWORD dwWidth, DWORD dwHeight, WORD wBpp)
- Создаёт изображение с заданными
параметрами ширины, высоты и бит на точку
CxImage(const CxImage *isrc)
- Создаёт изображение с теми же
характеристиками из исходного изображения. Биты
исходного изображения не копируются в новое
изображение.
CxImage(HBITMAP hbmp)
- Содаёт изображение из объекта bitmap.
CxImage(HANDLE hMem)
- Создаёт изображение из глобального
дескриптора.
CxImage(constchar * filename, DWORD imagetype=0)
- Создаёт изображение из файла
Инициализация
void* Create(DWORD dwWidth, DWORD
dwHeight, WORD wBpp)
- Инициализирует или заново создаёт
изображение. Возвращает указатель на внутренний
объект hDib
void Clear(BYTE bval=0)
- Устанавливает биты изображения в
определённое значение.
void Copy(CxImage *src)
- Делает копию изображения из
существующего.
Основные операции
HANDLE CopyToHandle(HANDLE hMem)
- Копирует изображение в глобальный
дескриптор
void Transfer(CxImage *from)
- Преобразовывает изображение из
существующего исходного изображения. Исходное
становится пустым.
bool IsValid()
- Проверяет - правильно ли была
инициализирована картинка.
bool IsInside(long x, long y)
- Проверяет - попадают ли координаты
внутрь изображения.