Вторник, 12.11.2019, 15:52
Главная | Регистрация | Вход Приветствую Вас Гость | RSS


Меню сайта


Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Тестування онлайн
тестування онлайн 


Социальные закладк

Сохранение изображений

Анимацию, созданную в программе Processing, можно перевести в последовательность файлов с помощью функции saveFrame().

Если в конце блока draw() стоит функция saveFrame(), то при выходе из программы она сохранит пронумерованные изображения в формате TIFF под названиями screen-0001.tif, screen-0002.tif и т.д. в папку скетча.

 

Эти файлы могут быть импортированы в видео или в анимационную программу и сохранены как видеофайл. Вы можете сами указать имя файла изображения и его формат с помощью строки кода такого типа: 

saveFrame("images/хххх-####.png")  – стандартная форма записи команды

 

ПРИМЕЧАНИЕ: При использовании функции saveFrame() в блоке draw() в каждом кадре создается новый файл, поэтому будьте внимательны - папка с вашим скетчем может очень быстро заполниться тысячами файлов.

Используйте символы # (октоторп или хэш) для указания места, где будет номер в имени файла. При сохранении они будут заменены на номер кадра. Вы также можете указать папку, в которую будут сохраняться ваши изображения, что очень удобно при работе с большим числом изображений кадров, например:

saveFrame("images/urok-####.png");

где:

  • имя папки -images,
  • имя очередного фрейма (кадра изображения) - urok
  • номер очередного фрейма - ####
  • формат файла сохранения - png,

Пример 1.

Для того, чтобы показать, как сохранять изображения, мы напишем небольшой скетч.

 

int n=0;//для подсчета количества кадров
void setup()//встроенная функция, вызывается один раз - при запуске скетча
{
  size(300, 250);// устанавливаем размер окна
  background(0);//устанавливаем цвет заливки фона
  frameRate(2);// задает частоту смены кадров в секунду
}

void draw()// встроенная функция, запускается снова и снова - пока мы не выключим программу
{
  //от запуска к запуску значение переменной увеличивается на единицу - выполняется подсчет кадров
n = n+1;

// функция random  запрашивает  два параметра-начальный и конечный  

strokeWeight(random(0,30)); // для установки размера  точки

stroke(random(0,255),random(0,255),random(0,255),random(0,255)); //установка цвета 

//координата x меняет  свои значения от 0 до значения ширины окна, 
//соответственно  y от 0 до значения высоты окна

point(random(0,width),random(0,height));

if(keyPressed==true)  //если либо-какая клавиша нажата

saveFrame("images/urok - ####.png");// выполняется запись кадра (фрейма) в папку images
}

println("n = ",n);// для визуализации текущих значений переменной n
}

 

итог:

Пять нажатий на клавишу клавиатуры  - пять сохраненных кадров из 32:

if(keyPressed==true)  //если либо-какая клавиша нажата

saveFrame("images/urok - ####.png");// выполняется запись кадра (фрейма) в папку images
}

 

В функции draw() мы использовали встроенную переменную keyPressed

Значение этой переменной:

  • равно true если какая-либо клавиша нажата

и

  • false в противном случае.

Заключение.

Функция saveFrame()  применяется для сохранения изображения окна скетча на жесткий диск.

В ней нужно записать строку с именем файла с изображением :  saveFrame("images/хххх-####.png") – стандартная форма записи команды

  • . В нашем примере - images/ в начале этой строки, чтобы Processing сохранил изображение в папку images.
  • Вы обнаружите эту папку в папке вашего скетча после запуска скетча и сохранения изображения.
  • #### нужны для добавления к изображению текущего номера кадра. Если не записать их, то существующий файл будет перезаписываться.
  • Задать формат файла совсем несложно.
    • Если вы запишете в конце строки: .png, то Processing сохранит файл PNG.
    •  Если запишете .jpg, будет сохранен файл JPEG.
    • Вы можете указывать расширения .jpg,.png, .tif и .tga.

Для просмотра сохраненных изображений откройте папку со скетчем.

Для быстрого доступа к изображениям выполняйте следующий путь: Sketch | Show Sketch Folder:

  

Пример 2.

float x = 0;//для хранения текущего значения координаты по оси ОХ

int n=0;// для подсчета количества кадров
void setup() {
  
size(720, 480);
smooth();  //сглаживание контура фигуры
noFill();  //отмена заливки фигуры
strokeCap(SQUARE);   // Концы линий – квадратные
frameRate(30);  //программа работает в частотой 30 кадров в секунду 

}

void draw() {
  

background(204);  //устанавливает цвет фона

//смещает начало координат в точку (х,0), от кадра к кадру значение переменной х увеличивается на 2.5 
//информация о свойстве этой функции рассмотрим позже

translate(x, 0);

//используем значение переменной у - счетчика цикла 
//и как очередное значение координаты у при прорисовке линии

for (int y = 40; y < 280; y += 20) {
line(-260, y, 0, y + 200);
line(0, y + 200, 260, y);
println( "  y =  ", y);
}

if (frameCount < 60) /*программа работает с частотой 30 кадров в 
                  секунду и завершается после 60 кадров */
{
 // пока выполняется условие выбора Processing запишет изображения на основе
//указанного вами расширения файла (.png, .jpg и .tif  

saveFrame("frames/kadr-####.jpg"); 

// в противном случае выполняется завершение выполнения проекта
} else {
exit();
}

n=n+1; //выполняется подсчет количества кадров
x += 2.5; //увеличивает текущее значение переменной х на 2.5 от кадра к кадру
println("n =  ",n, "  x =   ",x);
}

Результат:

 

Форма входа
Поиск
Календарь
«  Ноябрь 2019  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Рейтинг@Mail.ru
    Copyright MyCorp © 2019
    Конструктор сайтов - uCoz