Pull to refresh

Рисуем анимированные gif-ки с помощью libgd.

Reading time 2 min
Views 19K
Смысл данной статьи — дать представление о использовании библиотеки GD в связке с С.

Скачать libgd или почитать более подробно о ее использовании можно здесь: http://www.libgd.org/(eng.)

После установки GD cписок функций и типы принимаемых/возвращаемых данных можно посмотреть в файлике /usr/local/include/gd.h (в моем случае, иначе sudo updatedb && locate gd.h) понять назначение функций довольно просто по их названию.

Код небольшой программки с моим описанием, которая рисует вотэто:

Image and video hosting by TinyPic



Если что-нибудь будет непонятно, ниже приведу более подробное объяснение.

Итак начнем:

// Инклудим нужные библиотеки
#include <gd.h>
#include <stdio.h>

int main(int argc, char **argv) {

   gdImagePtr im,im_clear; // обьявляем переменные для хранения указателей на нарисованные изображения
   int black, white, trans; // обьявляем переменные для хранения цветов
   FILE *out1; //обьявляем указатель на файл

   im = gdImageCreate(100, 100); //создаем пустой лист размером 100х100
   im_clear = gdImageCreate(100, 100);

   white = gdImageColorAllocate(im, 255, 255, 255); // обьявляем цвета
   black = gdImageColorAllocate(im, 0, 0, 0);
   trans = gdImageColorAllocate(im, 1, 1, 1);

   gdImageCopy (im_clear, im, 0,0,0,0, 100, 100); //Копируем пока еще пустой im в im_clear
   if (argc>1) out1 = fopen(argv[1], "wb"); else out1 = fopen("anim.gif", "wb"); // открываем файл куда сохраним свою гифку
   gdImageGifAnimBegin(im, out1, 1, 0); //Пишем заголовок gif-а
   
   for (int i=0;i<25;i++)
   {
      gdImageCopy (im, im_clear, 0,0,0,0, 100, 100); //очищаем лист im
      gdImageRectangle(im, i*2, i*2, 100-i*2-1, 100-i*2-1, black); // рисуем квадрат
      gdImageGifAnimAdd(im, out1, 0, 0, 0, 10, 1, NULL);//пишем кадр в гифку
   };

   putc (';', out1); // пишем в гифку конец
   fclose(out1); //закрываем файлик

   gdImageDestroy(im); // убираем за собой
   gdImageDestroy(im_clear);

}

* This source code was highlighted with Source Code Highlighter.


Сохраняем файлик,
компилируем его, в моём случае так: gсс -lgd имя_файла -o имя_исполняемого_файла
и запускаем: ./имя_исполняемого_файла [куда_сохранить_картинку]

upd: В моем случае использовалась ОС Ubuntu 8.10, в вашем случае могут быть незначительные отличия в командах.
Tags:
Hubs:
+25
Comments 43
Comments Comments 43

Articles