Processing 2. Креативное программирование
.pdfProcessing
saveBytes() ., - .
, . , hex- . HexEdit Mac OS X; Windows Linux . . .
loadBytes()., hex-, . , ,.
byte[] bytes = loadBytes("strangefile-56.zzz"); println( char( bytes ) );
120
6
:
., ,. ,,Vimeo YouTube.
. ,.
Processing playing_video.pde.dataProcessing. marbles.mov; ,. dataProcessing. , PDE.
video. Sketch | Import Library | video. Movie setup().setup() .
import processing.video.*;
Movie m;
void setup()
{
size( 640, 480 );
m = new Movie( this, "marbles.mov" ); m.loop();
}
, - movieEvent() .
void movieEvent( Movie m )
{
m.read();
}
, - image().
void draw()
{
background( 0 );
image( m, 0, 0, width, height );
}
122
6
, , :
, - Movie. setup(). setup() new Movie()data . . -this. PApplet new Movie. - .loop() Movie.
movieEvent() , . read() Movie.image().
123
Processing - . ProcessingMovieMaker, QuickTime movie. Processing 2 GStreamer framework. -, .
. PVector -, .900- , .
int randomNum; l
PVector[] points;
float radius = 2;
void setup()
{
size( 1280, 720 ) smooth();
background( 234, 228, 17 );
points = new PVector[64];
for ( int i = 0; i < points.length; i++ ) {
points[i] = new PVector(random(width), random(height));
}
frameRate( 30 );
randomNum = floor( random( 10000, 90000 ) );
noFill(); stroke( 0, 64 );
}
void draw()
{
for ( int i = 0; i < points.length; i++ ) { float newX = points[i].x + random( -10, 10 );
124
6
float newY = points[i].y + random( -10, 10 );
stroke( i*4, 64 );
line( points[i].x, points[i].y, newX, newY ); ellipse( newX, newY, radius, radius );
points[i].x = newX; points[i].y = newY;
}
radius++;
if ( radius > 10 ) { radius = 2;
}
saveFrame("images/export-"+randomNum+"-#####.tga");
// save 900 frames = 30 sec @ 30 fps if ( frameCount >= 900 ) {
exit();
}
}
imagesTGA.
125
-setup() . 1280 x 72030 . ,. -Vimeo YouTube. ,, , , frameRate().
saveFrame().randomNum,.. exit(). 30- , 900 . :x = .
TGA.Processing, TGA .PNG JPEG, , .
,image(). ,, .
. video,Movie, .
import processing.video.*;
Movie m;
int numPixels;
void setup()
{
size( 640, 480 );
numPixels = width * height;
m = new Movie( this, "marbles.mov" ); m.loop();
}
126
6
draw().image(). ,245.
void draw()
{
background( 0 );
image( m, 0, 0, width, height );
loadPixels();
for ( int i = 0; i < numPixels; i++ ) { float b = brightness( pixels[i] ); if ( b > 245 ) {
pixels[i] = lerpColor( pixels[i], color(0, 0, 0), map(b, 0, 255, 0, 1));
}
}
updatePixels();
}
void movieEvent( Movie m )
{
m.read();
}
, , ,.
127
loadPixels().for. , 245,. updatePixels().
lerpColor() ., ,, .0 1. 0.1, . 0.9, .0.5.
, , ..hue() saturation() .
, , .filter() .
.filter() image().
import processing.video.*;
Movie m;
void setup()
{
size( 640, 480 );
m = new Movie( this, "marbles.mov" ); m.loop();
}
void draw()
{
background( 0 );
128
6
image( m, 0, 0, width, height ); filter( POSTERIZE, 4 );
}
void movieEvent( Movie m )
{
m.read();
}
filter() POSTERIZE.:
filter(), ,. . ,filter():
fBLUR: ..1 . ,, .
129