Работаем с изображениями

Processing может работать и с изображениями.

Создайте новый скетч. Перетащите любое изображение в текстовый редактор Processing. Это самый простой способ добавить файл к скетчу. После этого можно писать код. Объявим несколько переменных.

PImage img;

boolean pixelMode = false;
int copyWidth = 50;
int copyHeight = 3;

В функции setup() установим размер окна и загрузим изображение, которое мы только что сохранили в папке data в объект PImage.

void setup()
{
    size(640, 480);
    smooth();
    img = loadImage("cat.jpg");
}

В функции draw() получим несколько случайных чисел и применим их потом для замены пикселей или частей изображения. В блоке if-else реализован алгоритм замены пикселей. Наконец, мы выведем на экран новое изображение с помощью функции image().

void draw()
{
    int x1 = floor(random(width));
    int y1 = floor(random(height));
    int x2 = floor(random(width));
    int y2 = floor(random(height));
    if ( pixelMode == true) {
        color c1 = img.get(x1, y1);
        color c2 = img.get(x2, y2);
        img.set(x1, y1, c2);
        img.set(x2, y2, c1);
    } else {
        PImage crop1 = img.get(x1, y1, copyWidth, copyHeight);
        PImage crop2 = img.get(x2, y2, copyWidth, copyHeight);
        img.set(x1, y1, crop2);
        img.set(x2, y2, crop1);
    }
    image(img, 0, 0);
}

Когда вы перетаскиваете изображение в текстовый редактор, Processing создает копию этого файла и сохраняет его в папке data вашего скетча. Просмотреть эту папку можно в меню Sketch | Show Sketch Folder.

Перед тем, как работать с изображениями в Processing, нужно объявить объект класса PImage. Функция loadImage() загружает изображение из папки data в этот объект PImage.

Для копирования пикселей и изменения их цвета мы использовали методы get() и set() из класса PImage. Они могут использоваться с двумя или четырьмя параметрами. Метод get() с двумя параметрами возвращает цвет заданной координаты.

Если вы используете его с четырьмя координатами, он возвращает объект класса PImage. Первые два параметра задают координаты x/y верхнего левого угла, третий и четвертый устанавливают ширину и высоту копируемого фрагмента в пикселях. Метод set() аналогичен get(), но он меняет цвет заданного пикселя или прямоугольной области пикселей.

В примере используется логическая переменная pixelMode для переключения с одного пикселя на группу пикселей. Переменные copyWidth и copyHeight устанавливают размер копируемой/вставляемой области пикселей.

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

Сохранить скетч на жесткий диск можно с помощью функции saveFrame().

void setup()
{
  size( 640, 480 );
}

void draw()
{
  background( 100 );
  for ( int i = 0; i < 100; i++ ) {
    fill( random( 255 ), 128 );
    stroke( 255, 128 );
    ellipse( random( width ), random( height ), 60, 60 );
  }

  if ( keyPressed ) {
    saveFrame("images/ellipses.png");
  }
}

Скетч генерирует окружности в случайном порядке. При нажатии на любую клавишу на жёсткий диск сохранятся картинка. Её можно найти в папке images запущенного скетча. Причём повторное нажатие перезапишет файл. Чтобы этого избежать, используйте формат ellipses-####.png. В этом случае файлы будут создаваться заново под разными именами, подставляя вместо символов # цифры.

Кроме PNG, вы можете указывать и другие форматы изображений - JPG, TIF, TGA.

results matching ""

    No results matching ""