Тема: Огляд мови Processing
Читав я про різні мови програмування і випадково натрапив на Processing. Ця мова використовується митцями, статистами, журналістами, розробниками ігор й иншими хорошими людьми. Особливістю мови є те, що пострадянському просторі про неї ніхто не знає, а ті хто знає, не виказують цього, аби потік дармових грошей не скінчався. Я кажу про texty.org.ua, які використовуючи майже не змінні приклади з підручників процесингу та рубі, роблять значний шекель (як я дізнався про їхній шекель? Я побачив, що вони за простий переклад невеликого комікса (точніше visual novel) просять 900 грн. щоб не збрехати. Зазначу, що "перекладом" комікса є лише коментарі під малюнками, а не зміна самих малюнків). І найгірше те, що їхній кагал є одним з найпрогресивніших в українській журналістиці через використання вищезгаданих технологій, а саме - журналістики даних.
Мова processing була розроблена в МІТ і є надбудовою над JAVA, окрім неї існує й інша версія, що заснована на джаваскрипті - processing.js.
Сьогодні розглянемо канонічний приклад використання мови процессинг - обробку зображень. Нашим піддослідним кроликом буде страшна лісова тварюка, яка схожа за описом на Альонушку у п'єсі Леся "Павлік Морозов", а саме - солістка гурту Within Temptation на обкладинці альбому Mother Earth.
Нижченаведений код зробить з неї лісовий аналог Трініті. Коментувати тут нічого, бо мова сіподібна.
PImage img;
// Обчислює середній колір обраного прямокутника на малюнку і озеленяє все навкруги, притлумлюючи инші кольори
color thiscolor(int x, int y, int w, int h) {
color c, res; int r = 0, g = 0, b = 0, wh = w*h;
for(int xt=x; xt<(x+w); xt++) {
for(int yt=y; yt<(y+h); yt++) {
c = img.get(x, y);
r += red(c);
g += green(c);
b += blue(c);
};
};
return (color((r/wh)*0.3, (g/wh)*0.9, (b/wh)*0.6)); // Встановлюємо правильні світлові фільтри на нашу "камеру". Червоний колір на малюнку не вписується в наше стильове оформлення, отож його найбільше притлумлюємо
};
void setup() {
img = loadImage("WithinTemptation.jpg"); \\Створює об'єкт зображення
size(img.width, img.height);
int resolutionWidth = 150; \\ кількість "пікселів" у ширину
int resolutionHeight = 120; \\ кількість "пікселів" у висоту
int xInc = width/resolutionWidth;
int yInc = height/resolutionHeight;
for(int x=0; x<img.height; x+=xInc) {
for(int y=0; y<img.width; y+=yInc) {
stroke(0); \\ колір контуру "піксела", 0 - чорний, 255 - білий.
fill(thiscolor(x, y, xInc, yInc)); \\ встановлення кольору заповнення "піксела"
rect(x, y, xInc, yInc); \\ малювання "піксела"
}
}
};
Зараз поглянемо на одержаний результат:
Трішки побавимося із зображенням - приберемо із зображення контури "пікселів", змінивши один рядок в коді програми - stroke(0) на noStroke() і одержимо таке:
Яка гарна 8-бітна краля, монохорму має сподобатися, а тепер змінимо термінал на більш дешевий (90x60 пікселів), тобто замінимо
int resolutionWidth = 150;
int resolutionHeight = 120;
на
int resolutionWidth = 90;
int resolutionHeight = 70;
Як бачимо, зі зміною чіткості зображення, носом лісова хвея стала схожа на Майкла Джексона. І тепер поглянемо на зображення без "піксельних" контурів:
Останній малюнок нагадує мозаїку брежнівського періоду на будинку тролейбусного депо.