- PVSM.RU - https://www.pvsm.ru -
Доброго времени суток!
Все время очень сильно привлекала внимание обработка изображений (алгоритмы сжатия, фильтры и т.д.). Увы, сложилось так, что работа практически не связана ни с обработкой изображений, ни с программированием вообще. Тем не менее, интерес к любимому делу не уменьшился и поэтому хочу представить Вашему вниманию недавно открытую для себя библиотеку CImg.
CImg – библиотека C++, предоставляющая классы и функции обработки изображений. Это как элементарные функции (загрузка, сохранение, просмотр), так и алгоритмы для изменения размера/вращения, применения эффектов, отрисовки объектов (текста, линий, поверхностей, элипсов, ...), и т.д.
Библиотека состоит из одного заголовочного файла CImg.h, который включает в себя все классы и функции CImg. В этом отличительная черта библиотеки, в чем есть некоторые плюсы:
Библиотека CImg имеет следующую структуру:
#include "CImg.h"
using namespace cimg_library;
Знание этих четырех классов достаточно, чтобы в полное мере пользоваться функциональностью CImg-библиотеки.
Ну да ладно, сказано было достаточно много. Рассмотрим лучше наглядный пример того, как работает элементарная программа, написанная с использованием CImg.
#include "CImg.h"
using namespace cimg_library;
int main() {
CImg<unsigned char> img(640,400,1,3);
img.fill(0);
unsigned char purple[] = { 255,0,255 };
img.draw_text(100,100,"Hello World",purple);
img.display("My first CImg code");
return 0;
}
Рассмотрим более детально каждую строку программы:
Подключим заголовочный файл библиотеки CImg
#include "CImg.h"
Будем использовать пространство имен cimg_library, чтобы облегчить объявления типов
using namespace cimg_library;
Объявим главную функцию программы
int main() {
Создадим экземпляр изображения — img, с типом пикселей unsigned char, размера 640*400*1 пикселей (в данном случае 1 говорит о том, что изображение будет плоским, не трехмерным). Каждый пиксель имеет 3 канала — RED, GREEN и BLUE. Об этом говорит последний параметр конструктора.
CImg<unsigned char> img(640,400,1,3);
Закрасим изображение черным цветом («0» означает черный)
img.fill(0);
Объявим переменную purple: она будет цветом
unsigned char purple[] = { 255,0,255 };
Выведем от точки (100,100) на изображении текст «Hello World» цветом purple
img.draw_text(100,100,"Hello World",purple);
Покажем изображение в графическом окне с заголовком «My first CImg code»
img.display("My first CImg code");
Завершим программу
return 0;
Как видно, библиотека CImg достаточна проста в использовании, названия методов интуитивно понятны. Хотя вышеизложенный код можно было записать еще более компактно:
#include "CImg.h"
using namespace cimg_library;
int main() {
const unsigned char purple[] = { 255,0,255 };
CImg<unsigned char>(640,400,1,3,0).draw_text(100,100,"Hello World",purple).display("My first CImg code");
return 0;
}
Скриншот (кликабельно):
[1]
Надеюсь, в будущем разберем еще несколько примеров, уже посложнее!
Сайт проекта: cimg.sourceforge.net [2]
Благодарю за внимание!
g++ -o hello hello.cpp -O2 -L/usr/X11R6/lib -lm -lpthread -lX11
(Можно обойтись и без -O2)$ time g++ -o hello hello.cpp -O2 -L/usr/X11R6/lib -lm -lpthread -lX11
real 0m28.397s
user 0m27.991s
sys 0m0.265s
Автор: alexeyanikanov
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/4420
Ссылки в тексте:
[1] Image: http://img13.imageshost.ru/img/2012/03/29/image_4f737787dfc60.png
[2] cimg.sourceforge.net: http://cimg.sourceforge.net/
[3] Hello, World!: http://www.roesler-ac.de/wolfram/hello.htm
Нажмите здесь для печати.