ruby-processing 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +137 -0
- data/LICENSE +37 -0
- data/README +61 -0
- data/bin/rp5 +4 -0
- data/lib/core/core.jar +0 -0
- data/lib/core/jruby-complete.jar +0 -0
- data/lib/ruby-processing.rb +27 -0
- data/lib/ruby-processing/app.rb +358 -0
- data/lib/ruby-processing/exporters/applet_exporter.rb +75 -0
- data/lib/ruby-processing/exporters/application_exporter.rb +87 -0
- data/lib/ruby-processing/exporters/base_exporter.rb +133 -0
- data/lib/ruby-processing/exporters/creator.rb +46 -0
- data/lib/ruby-processing/helpers/string.rb +27 -0
- data/lib/ruby-processing/runner.rb +143 -0
- data/lib/ruby-processing/runners/base.rb +5 -0
- data/lib/ruby-processing/runners/live.rb +11 -0
- data/lib/ruby-processing/runners/run.rb +5 -0
- data/lib/ruby-processing/runners/watch.rb +42 -0
- data/lib/templates/applet/images/built_with.jpg +0 -0
- data/lib/templates/applet/images/ruby.jpg +0 -0
- data/lib/templates/applet/images/top.png +0 -0
- data/lib/templates/applet/index.html.erb +111 -0
- data/lib/templates/applet/library/library.txt +1 -0
- data/lib/templates/application/Contents/Info.plist.erb +58 -0
- data/lib/templates/application/Contents/MacOS/JavaApplicationStub +0 -0
- data/lib/templates/application/Contents/PkgInfo +1 -0
- data/lib/templates/application/Contents/Resources/sketch.icns +0 -0
- data/lib/templates/application/lib/MANIFEST.MF +3 -0
- data/lib/templates/application/lib/args.txt.erb +3 -0
- data/lib/templates/application/lib/library/library.txt +1 -0
- data/lib/templates/application/run.erb +4 -0
- data/lib/templates/application/run.exe +0 -0
- data/lib/templates/create/blank_sketch.rb.erb +15 -0
- data/library/boids/boids.rb +222 -0
- data/library/control_panel/control_panel.rb +149 -0
- data/library/dxf/bin/processing/dxf/RawDXF.class +0 -0
- data/library/dxf/dxfviewer.jar +0 -0
- data/library/dxf/library/dxf.jar +0 -0
- data/library/javascript/library/export.txt +6 -0
- data/library/javascript/library/javascript.jar +0 -0
- data/library/minim/library/jl1.0.jar +0 -0
- data/library/minim/library/jsminim.jar +0 -0
- data/library/minim/library/minim-spi.jar +0 -0
- data/library/minim/library/minim.jar +0 -0
- data/library/minim/library/mp3spi1.9.4.jar +0 -0
- data/library/minim/library/tritonus_aos.jar +0 -0
- data/library/minim/library/tritonus_share.jar +0 -0
- data/library/minim/license.txt +339 -0
- data/library/minim/version.txt +1 -0
- data/library/net/bin/processing/net/Client.class +0 -0
- data/library/net/bin/processing/net/Server.class +0 -0
- data/library/net/library/net.jar +0 -0
- data/library/opengl/bin/processing/opengl/PGraphicsOpenGL$ImageCache.class +0 -0
- data/library/opengl/bin/processing/opengl/PGraphicsOpenGL$TessCallback.class +0 -0
- data/library/opengl/bin/processing/opengl/PGraphicsOpenGL.class +0 -0
- data/library/opengl/library/export.txt +13 -0
- data/library/opengl/library/gluegen-rt-natives-linux-amd64.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-linux-i586.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-macosx-ppc.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-macosx-universal.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-windows-amd64.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-windows-i586.jar +0 -0
- data/library/opengl/library/gluegen-rt.dll +0 -0
- data/library/opengl/library/gluegen-rt.jar +0 -0
- data/library/opengl/library/gluegen-rt.jar.pack.gz +0 -0
- data/library/opengl/library/jogl-natives-linux-amd64.jar +0 -0
- data/library/opengl/library/jogl-natives-linux-i586.jar +0 -0
- data/library/opengl/library/jogl-natives-macosx-ppc.jar +0 -0
- data/library/opengl/library/jogl-natives-macosx-universal.jar +0 -0
- data/library/opengl/library/jogl-natives-windows-amd64.jar +0 -0
- data/library/opengl/library/jogl-natives-windows-i586.jar +0 -0
- data/library/opengl/library/jogl.dll +0 -0
- data/library/opengl/library/jogl.jar +0 -0
- data/library/opengl/library/jogl.jar.pack.gz +0 -0
- data/library/opengl/library/jogl_awt.dll +0 -0
- data/library/opengl/library/jogl_cg.dll +0 -0
- data/library/opengl/library/libgluegen-rt.jnilib +0 -0
- data/library/opengl/library/libgluegen-rt.so +0 -0
- data/library/opengl/library/libjogl.jnilib +0 -0
- data/library/opengl/library/libjogl.so +0 -0
- data/library/opengl/library/libjogl_awt.jnilib +0 -0
- data/library/opengl/library/libjogl_awt.so +0 -0
- data/library/opengl/library/libjogl_cg.jnilib +0 -0
- data/library/opengl/library/libjogl_cg.so +0 -0
- data/library/opengl/library/opengl.jar +0 -0
- data/library/pdf/bin/processing/pdf/PGraphicsPDF.class +0 -0
- data/library/pdf/library/itext.jar +0 -0
- data/library/pdf/library/pdf.jar +0 -0
- data/library/pdf/notes.txt +9 -0
- data/library/serial/bin/processing/serial/Serial.class +0 -0
- data/library/serial/library/RXTXcomm.jar +0 -0
- data/library/serial/library/export.txt +3 -0
- data/library/serial/library/librxtxSerial.jnilib +0 -0
- data/library/serial/library/librxtxSerial.so +0 -0
- data/library/serial/library/rxtxSerial.dll +0 -0
- data/library/serial/library/serial.jar +0 -0
- data/library/video/bin/processing/video/Capture.class +0 -0
- data/library/video/bin/processing/video/Movie.class +0 -0
- data/library/video/bin/processing/video/MovieMaker.class +0 -0
- data/library/video/library/video.jar +0 -0
- data/samples/animator.rb +47 -0
- data/samples/circle_collision.rb +213 -0
- data/samples/fern.rb +49 -0
- data/samples/flight_patterns.rb +64 -0
- data/samples/full_screen.rb +35 -0
- data/samples/getting_started.rb +43 -0
- data/samples/jwishy.rb +85 -0
- data/samples/kinetic_type.rb +100 -0
- data/samples/learning_processing/ABOUT +11 -0
- data/samples/learning_processing/chapter_01/1_stroke_and_fill.rb +34 -0
- data/samples/learning_processing/chapter_01/2_nofill.rb +25 -0
- data/samples/learning_processing/chapter_01/3_rgb_color.rb +31 -0
- data/samples/learning_processing/chapter_01/4_alpha_transparency.rb +36 -0
- data/samples/learning_processing/chapter_01/5_zoog.rb +37 -0
- data/samples/learning_processing/chapter_02/1_zoog_again.rb +39 -0
- data/samples/learning_processing/chapter_03/1_zoog_as_dynamic_sketch.rb +44 -0
- data/samples/learning_processing/chapter_03/2_mouse_x_and_mouse_y.rb +26 -0
- data/samples/learning_processing/chapter_03/3_zoog_as_dynamic_sketch_with_variation.rb +41 -0
- data/samples/learning_processing/chapter_03/4_drawing_a_continuous_line.rb +18 -0
- data/samples/learning_processing/chapter_03/5_mouse_pressed_and_key_pressed.rb +29 -0
- data/samples/learning_processing/chapter_03/6_interactive_zoog.rb +50 -0
- data/samples/learning_processing/chapter_04/1_variable_declaration.rb +24 -0
- data/samples/learning_processing/chapter_04/2_using_variables.rb +27 -0
- data/samples/learning_processing/chapter_04/3_varying_variables.rb +27 -0
- data/samples/learning_processing/chapter_04/4_many_variables.rb +38 -0
- data/samples/learning_processing/chapter_04/5_using_system_variables.rb +28 -0
- data/samples/learning_processing/chapter_04/6_ellipse_with_variables.rb +24 -0
- data/samples/learning_processing/chapter_04/7_filling_variables_with_random_values.rb +27 -0
- data/samples/learning_processing/chapter_04/8_variable_zoog.rb +50 -0
- data/samples/learning_processing/chapter_05/01_conditionals.rb +31 -0
- data/samples/learning_processing/chapter_05/02_more_conditionals.rb +38 -0
- data/samples/learning_processing/chapter_05/03_rollovers.rb +34 -0
- data/samples/learning_processing/chapter_05/04_hold_down_the_button.rb +33 -0
- data/samples/learning_processing/chapter_05/05_button_as_switch.rb +39 -0
- data/samples/learning_processing/chapter_05/06_bouncing_ball.rb +33 -0
- data/samples/learning_processing/chapter_05/07_bouncing_color.rb +37 -0
- data/samples/learning_processing/chapter_05/08_square_following_edge.rb +59 -0
- data/samples/learning_processing/chapter_05/09_simple_gravity.rb +43 -0
- data/samples/learning_processing/chapter_05/10_zoog_and_conditionals.rb +53 -0
- data/samples/learning_processing/chapter_06/01_many_lines.rb +29 -0
- data/samples/learning_processing/chapter_06/02_many_lines_with_variables.rb +53 -0
- data/samples/learning_processing/chapter_06/03_while_loop.rb +30 -0
- data/samples/learning_processing/chapter_06/04_infinite_loop.rb +25 -0
- data/samples/learning_processing/chapter_06/05_another_infinite_loop.rb +33 -0
- data/samples/learning_processing/chapter_06/06_legs_with_a_for_loop.rb +41 -0
- data/samples/learning_processing/chapter_06/07_local_variables.rb +39 -0
- data/samples/learning_processing/chapter_06/08_lines_one_at_a_time.rb +30 -0
- data/samples/learning_processing/chapter_06/09_simple_while_loop_with_interactivity.rb +41 -0
- data/samples/learning_processing/chapter_06/10_zoog_with_arms.rb +56 -0
- data/samples/learning_processing/chapter_06/11_multiple_zoogs.rb +46 -0
- data/samples/learning_processing/chapter_07/01_defining_a_function.rb +22 -0
- data/samples/learning_processing/chapter_07/02_calling_a_function.rb +22 -0
- data/samples/learning_processing/chapter_07/03_bouncing_ball_with_functions.rb +49 -0
- data/samples/learning_processing/chapter_07/04_function_returns_distance.rb +48 -0
- data/samples/learning_processing/chapter_07/05_zoog_with_functions.rb +71 -0
- data/samples/learning_processing/chapter_08/01_car_class_and_car_variable.rb +45 -0
- data/samples/learning_processing/chapter_08/02_two_car_objects.rb +60 -0
- data/samples/learning_processing/chapter_08/03_object_oriented_zoog.rb +81 -0
- data/samples/learning_processing/chapter_10/01_catcher.rb +35 -0
- data/samples/learning_processing/chapter_10/02_bouncing_ball.rb +44 -0
- data/samples/learning_processing/chapter_10/03_bouncing_balls_with_intersection.rb +69 -0
- data/samples/learning_processing/chapter_10/04_a_timer.rb +24 -0
- data/samples/learning_processing/chapter_10/05_object_oriented_timer.rb +42 -0
- data/samples/learning_processing/chapter_10/06_simple_raindrop.rb +23 -0
- data/samples/learning_processing/chapter_10/07_drops_one_at_a_time.rb +63 -0
- data/samples/learning_processing/chapter_13/02_random_number_distribution.rb +24 -0
- data/samples/learning_processing/chapter_13/03_probabilities.rb +33 -0
- data/samples/learning_processing/chapter_13/04_perlin_noise.rb +22 -0
- data/samples/learning_processing/chapter_13/06_oscillation.rb +29 -0
- data/samples/learning_processing/chapter_13/07_wave.rb +31 -0
- data/samples/learning_processing/chapter_13/08_recursion.rb +30 -0
- data/samples/learning_processing/chapter_13/09_two_dimensional_array.rb +21 -0
- data/samples/learning_processing/chapter_13/10_two_dimensional_array_with_objects.rb +54 -0
- data/samples/learning_processing/chapter_14/01_growing_rectangle.rb +26 -0
- data/samples/learning_processing/chapter_14/02_multiple_translations.rb +37 -0
- data/samples/learning_processing/chapter_14/03_depth_rectangle.rb +29 -0
- data/samples/learning_processing/chapter_14/04_pyramid_using_beingshape.rb +55 -0
- data/samples/learning_processing/chapter_14/05_rotate_rectangle_around_center.rb +28 -0
- data/samples/learning_processing/chapter_14/06_rotate_z.rb +24 -0
- data/samples/learning_processing/chapter_14/07_rotate_x.rb +24 -0
- data/samples/learning_processing/chapter_14/08_rotate_y.rb +24 -0
- data/samples/learning_processing/chapter_14/09_rotate_all.rb +24 -0
- data/samples/learning_processing/chapter_14/10_draw_pyramid.rb +59 -0
- data/samples/learning_processing/chapter_14/12_rotating_one_square.rb +25 -0
- data/samples/learning_processing/chapter_14/13_rotating_another_square.rb +25 -0
- data/samples/learning_processing/chapter_14/14_rotating_both_squares.rb +43 -0
- data/samples/learning_processing/chapter_14/15_rotating_many_things.rb +56 -0
- data/samples/learning_processing/chapter_14/16_simple_solar_system.rb +53 -0
- data/samples/learning_processing/chapter_14/17_nested_push_and_pop.rb +50 -0
- data/samples/learning_processing/chapter_14/18_object_oriented_solar_system.rb +69 -0
- data/samples/learning_processing/chapter_15/01_hello_world_image.rb +20 -0
- data/samples/learning_processing/chapter_15/02_image_sprite.rb +29 -0
- data/samples/learning_processing/chapter_15/03_swapping_images.rb +25 -0
- data/samples/learning_processing/chapter_15/04_image_sequence.rb +22 -0
- data/samples/learning_processing/chapter_15/05_setting_pixels.rb +19 -0
- data/samples/learning_processing/chapter_15/06_pixels_2d.rb +29 -0
- data/samples/learning_processing/chapter_15/07_image_pixels.rb +40 -0
- data/samples/learning_processing/chapter_15/08_image_brightness.rb +29 -0
- data/samples/learning_processing/chapter_15/09_flashlight_effect.rb +42 -0
- data/samples/learning_processing/chapter_15/10_brightness_threshold.rb +33 -0
- data/samples/learning_processing/chapter_15/11_brightness_threshold_with_filter.rb +20 -0
- data/samples/learning_processing/chapter_15/12_pixel_neighbour_differences.rb +43 -0
- data/samples/learning_processing/chapter_15/14_pointillism.rb +34 -0
- data/samples/learning_processing/chapter_15/15_2d_image_mapped_to_3d.rb +43 -0
- data/samples/learning_processing/chapter_15/data/animal0.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal1.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal2.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal3.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal4.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal5.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal6.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/face.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/mysummervacation.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/sunflower.jpg +0 -0
- data/samples/learning_processing/chapter_16/01_display_video.rb +25 -0
- data/samples/learning_processing/chapter_16/02_manipulate_video_image.rb +24 -0
- data/samples/reflection.rb +26 -0
- data/samples/simple_buffer.rb +49 -0
- data/samples/tree.rb +83 -0
- metadata +348 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'ruby-processing'
|
|
2
|
+
|
|
3
|
+
class Pixels2dSketch < Processing::App
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
# load the pixels array
|
|
7
|
+
load_pixels
|
|
8
|
+
# Two loops allow us to visit every column (x) and every row (y).
|
|
9
|
+
# Loop through every pixel column
|
|
10
|
+
width.times do |x|
|
|
11
|
+
# Loop through every pixel row
|
|
12
|
+
height.times do |y|
|
|
13
|
+
# Use the formula to find the 1D location
|
|
14
|
+
# The location in the pixel array is calculated via our formula: 1D pixel location = x + y * width
|
|
15
|
+
loc = x + y * width
|
|
16
|
+
# We use the even-or-odd-ness of the column number (x) to determine whether the color should be black or white.
|
|
17
|
+
pixels[loc] = (x % 2 == 0) ? color(255) : color(0)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
# update the pixels on screen
|
|
21
|
+
update_pixels
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
Pixels2dSketch.new :title => "Pixels 2d", :width => 200, :height => 200
|
|
28
|
+
|
|
29
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'ruby-processing'
|
|
2
|
+
|
|
3
|
+
class ImagePixelsSketch < Processing::App
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@image = load_image 'sunflower.jpg'
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def draw
|
|
10
|
+
# load the pixels array
|
|
11
|
+
load_pixels
|
|
12
|
+
# Two loops allow us to visit every column (x) and every row (y).
|
|
13
|
+
# Loop through every pixel column
|
|
14
|
+
width.times do |x|
|
|
15
|
+
# Loop through every pixel row
|
|
16
|
+
height.times do |y|
|
|
17
|
+
# Use the formula to find the 1D location
|
|
18
|
+
loc = x + y * width # The location in the pixel array is calculated via our formula: 1D pixel location = x + y * width
|
|
19
|
+
|
|
20
|
+
# The functions red, green, and blue pull out the three color components from a pixel.
|
|
21
|
+
r = red(@image.pixels[loc])
|
|
22
|
+
g = green(@image.pixels[loc])
|
|
23
|
+
b = blue(@image.pixels[loc])
|
|
24
|
+
|
|
25
|
+
# Image Processing would go here
|
|
26
|
+
# If we were to change the RGB values, we would do it here, before setting the pixel in the display window.
|
|
27
|
+
|
|
28
|
+
# Set the display pixel to the image pixel
|
|
29
|
+
pixels[loc] = color(r,g,b)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
# update the pixels on screen
|
|
33
|
+
update_pixels
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
ImagePixelsSketch.new :title => "Image Pixels", :width => 200, :height => 200
|
|
39
|
+
|
|
40
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'ruby-processing'
|
|
2
|
+
|
|
3
|
+
class ImageBrightnessSketch < Processing::App
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@image = load_image 'sunflower.jpg'
|
|
7
|
+
# Let's grab the red, green and blue component of each pixel of the image to start with.
|
|
8
|
+
@image_pixels = @image.pixels.map {|p| [red(p), green(p), blue(p)]}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def draw
|
|
12
|
+
# We calculate a multiplier ranging from 0.0 to 8.0 based on mouseX position.
|
|
13
|
+
# That multiplier changes the RGB value of each pixel.
|
|
14
|
+
adjustment = (mouse_x.to_f / width) * 8.0
|
|
15
|
+
load_pixels # load the pixels array
|
|
16
|
+
|
|
17
|
+
# And here's a modified Ruby way to do the Java equivalent
|
|
18
|
+
pixels.size.times do |i|
|
|
19
|
+
pixels[i] = color(*@image_pixels[i].map {|rgb| rgb * adjustment })
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
update_pixels
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
ImageBrightnessSketch.new :title => "Image Brightness", :width => 200, :height => 200
|
|
28
|
+
|
|
29
|
+
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'ruby-processing'
|
|
2
|
+
|
|
3
|
+
class FlashlightEffectSketch < Processing::App
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@image = load_image 'sunflower.jpg'
|
|
7
|
+
# Let's grab the red, green and blue component of each pixel of the image to start with.
|
|
8
|
+
@image_pixels = @image.pixels.map {|p| [red(p), green(p), blue(p)]}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def draw
|
|
12
|
+
load_pixels # Load the pixels array
|
|
13
|
+
# Two loops allow us to visit every column (x) and every row (y).
|
|
14
|
+
# Loop through every pixel column
|
|
15
|
+
width.times do |x|
|
|
16
|
+
# Loop through every pixel row
|
|
17
|
+
height.times do |y|
|
|
18
|
+
# Use the formula to find the 1D location
|
|
19
|
+
loc = x + y * width # The location in the pixel array is calculated via our formula: 1D pixel location = x + y * width
|
|
20
|
+
|
|
21
|
+
# Calculate an amount to change brightness
|
|
22
|
+
# based on proximity to the mouse
|
|
23
|
+
distance = dist(x, y, mouseX, mouseY)
|
|
24
|
+
|
|
25
|
+
# The closer the pixel is to the mouse, the lower the value of "distance"
|
|
26
|
+
# We want closer pixels to be brighter, however, so we invert the value with the formula: adjustment = (50-distance)/50
|
|
27
|
+
# Pixels with a distance of 50 (or greater) have a brightness of 0.0 (or negative which is equivalent to 0 here)
|
|
28
|
+
# Pixels with a distance of 0 have a brightness of 1.0.
|
|
29
|
+
adjustment = (50 - distance) / 50
|
|
30
|
+
|
|
31
|
+
# Set the display pixel to the image pixel
|
|
32
|
+
pixels[loc] = color(*@image_pixels[loc].map {|rgb| rgb * adjustment })
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
update_pixels
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
FlashlightEffectSketch.new :title => "Flashlight Effect", :width => 200, :height => 200
|
|
41
|
+
|
|
42
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'ruby-processing'
|
|
2
|
+
|
|
3
|
+
class BrightnessThresholdSketch < Processing::App
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@source = load_image 'sunflower.jpg'
|
|
7
|
+
@destination = create_image @source.width, @source.height, RGB
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def draw
|
|
11
|
+
threshold = 127
|
|
12
|
+
# We are going to look at both image's pixels
|
|
13
|
+
@source.load_pixels
|
|
14
|
+
@destination.load_pixels
|
|
15
|
+
|
|
16
|
+
@source.width.times do |x|
|
|
17
|
+
@source.height.times do |y|
|
|
18
|
+
loc = x + y*@source.width;
|
|
19
|
+
# Test the brightness against the threshold
|
|
20
|
+
@destination.pixels[loc] = (brightness(@source.pixels[loc]) > threshold) ? color(255) : color(0)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# We changed the pixels in @destination
|
|
25
|
+
@destination.update_pixels
|
|
26
|
+
# Display the @destination
|
|
27
|
+
image @destination, 0, 0
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
BrightnessThresholdSketch.new :title => "Brightness Threshold", :width => 200, :height => 200
|
|
33
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'ruby-processing'
|
|
2
|
+
|
|
3
|
+
class BrightnessThresholdWithFilterSketch < Processing::App
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@img = load_image 'sunflower.jpg'
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def draw
|
|
10
|
+
# Draw the image
|
|
11
|
+
image @img, 0, 0
|
|
12
|
+
# Filter the window with a threshold effect
|
|
13
|
+
# 0.5 means threshold is 50% brightness
|
|
14
|
+
filter THRESHOLD, 0.5
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
BrightnessThresholdWithFilterSketch.new :title => "Brightness Threshold With Filter", :width => 200, :height => 200
|
|
20
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'ruby-processing'
|
|
2
|
+
|
|
3
|
+
class PixelNeighbourDifferencesSketch < Processing::App
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@img = load_image 'sunflower.jpg'
|
|
7
|
+
@destination = create_image @img.width, @img.height, RGB
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def draw
|
|
11
|
+
# We are going to look at both image's pixels
|
|
12
|
+
@img.load_pixels
|
|
13
|
+
@destination.load_pixels
|
|
14
|
+
|
|
15
|
+
# Since we are looking at left neighbors
|
|
16
|
+
# We skip the first column
|
|
17
|
+
(1...width).each do |x|
|
|
18
|
+
(0...height).each do |y|
|
|
19
|
+
# Pixel location and color
|
|
20
|
+
loc = x + y * @img.width
|
|
21
|
+
pix = @img.pixels[loc]
|
|
22
|
+
|
|
23
|
+
# Pixel to the left location and color
|
|
24
|
+
left_loc = (x - 1) + y * @img.width
|
|
25
|
+
left_pix = @img.pixels[left_loc]
|
|
26
|
+
|
|
27
|
+
# New color is difference between pixel and left neighbor
|
|
28
|
+
diff = (brightness(pix) - brightness(left_pix)).abs
|
|
29
|
+
@destination.pixels[loc] = color(diff)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# We changed the pixels in @destination
|
|
34
|
+
@destination.update_pixels
|
|
35
|
+
# Display the @destination
|
|
36
|
+
image @destination, 0, 0
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
PixelNeighbourDifferencesSketch.new :title => "Pixel Neighbour Differences", :width => 200, :height => 200
|
|
42
|
+
|
|
43
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'ruby-processing'
|
|
2
|
+
|
|
3
|
+
class PointillismSketch < Processing::App
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@pointillize = 10
|
|
7
|
+
@img = load_image 'sunflower.jpg'
|
|
8
|
+
background 255
|
|
9
|
+
frame_rate 200 # Let's run this one as fast as we can.
|
|
10
|
+
no_stroke
|
|
11
|
+
smooth
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def draw
|
|
15
|
+
# Pick a random point
|
|
16
|
+
x, y = rand(width), rand(height)
|
|
17
|
+
loc = x + y * width
|
|
18
|
+
|
|
19
|
+
# Look up the RGB color in the source image
|
|
20
|
+
load_pixels
|
|
21
|
+
pixel = @img.pixels[loc]
|
|
22
|
+
r, g, b = red(pixel), green(pixel), blue(pixel)
|
|
23
|
+
|
|
24
|
+
# Draw an ellipse at that location with that color
|
|
25
|
+
fill r, g, b, 100
|
|
26
|
+
# Back to shapes! Instead of setting a pixel, we use the color from a pixel to draw a circle.
|
|
27
|
+
ellipse x, y, @pointillize, @pointillize
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
PointillismSketch.new :title => "Pointillism", :width => 200, :height => 200
|
|
33
|
+
|
|
34
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'ruby-processing'
|
|
2
|
+
|
|
3
|
+
class TwoDMappedTo3dSketch < Processing::App
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@cellsize = 2
|
|
7
|
+
@img = load_image 'sunflower.jpg' # Load the image
|
|
8
|
+
@img.load_pixels
|
|
9
|
+
@pixels = @img.pixels
|
|
10
|
+
@cols = width / @cellsize # Calculate number of columns
|
|
11
|
+
@rows = height / @cellsize # Calculate number of rows
|
|
12
|
+
render_mode P3D
|
|
13
|
+
no_stroke
|
|
14
|
+
rect_mode CENTER
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def draw
|
|
18
|
+
background 255
|
|
19
|
+
@cols.times do |i| # Begin loop for columns
|
|
20
|
+
x = i * @cellsize + @cellsize / 2 # x position
|
|
21
|
+
@rows.times do |j| # Begin loop for rows
|
|
22
|
+
y = j * @cellsize + @cellsize / 2 # y position
|
|
23
|
+
loc = x + y * width # Pixel array location
|
|
24
|
+
c = @pixels[loc] # Grab the color
|
|
25
|
+
|
|
26
|
+
# Calculate a z position as a function of mouse_x and pixel brightness
|
|
27
|
+
z = (mouse_x/width.to_f) * brightness(@pixels[loc]) - 100.0
|
|
28
|
+
|
|
29
|
+
# Translate to the location, set fill and stroke, and draw the rect
|
|
30
|
+
push_matrix
|
|
31
|
+
translate x, y, z
|
|
32
|
+
fill c
|
|
33
|
+
rect 0, 0, @cellsize, @cellsize
|
|
34
|
+
pop_matrix
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
TwoDMappedTo3dSketch.new :title => "2d Mapped To 3d", :width => 200, :height => 200
|
|
42
|
+
|
|
43
|
+
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'ruby-processing'
|
|
2
|
+
|
|
3
|
+
class CaptureVideoSketch < Processing::App
|
|
4
|
+
|
|
5
|
+
# Step 1. Import the video library
|
|
6
|
+
load_library "video"
|
|
7
|
+
# We need the video classes to be included here.
|
|
8
|
+
include_package "processing.video"
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
# Step 2. Declare a Capture object
|
|
12
|
+
@video = Capture.new(self, width, height, 30)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def draw
|
|
16
|
+
# Step 3 and 4: Read from the camera if it's available.
|
|
17
|
+
@video.read if @video.available
|
|
18
|
+
|
|
19
|
+
# Step 5. Display the video image.
|
|
20
|
+
image @video, 0, 0
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
CaptureVideoSketch.new :title => "Capture Video", :width => 320, :height => 240
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'ruby-processing'
|
|
2
|
+
|
|
3
|
+
class ManipulateVideoImageSketch < Processing::App
|
|
4
|
+
|
|
5
|
+
load_library "video"
|
|
6
|
+
include_package "processing.video"
|
|
7
|
+
|
|
8
|
+
def setup
|
|
9
|
+
@video = Capture.new(self, width, height, 30)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def draw
|
|
13
|
+
@video.read if @video.available
|
|
14
|
+
|
|
15
|
+
# Tinting using mouse location
|
|
16
|
+
tint mouse_x, mouse_y, 255
|
|
17
|
+
|
|
18
|
+
# A video image can also be tinted and resized just as with a PImage.
|
|
19
|
+
image @video, 0, 0, mouse_x, mouse_y
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
ManipulateVideoImageSketch.new :title => "Manipulate Video Image", :width => 320, :height => 240
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Taken from the Processing Examples.
|
|
2
|
+
|
|
3
|
+
require 'ruby-processing'
|
|
4
|
+
|
|
5
|
+
class Reflection < Processing::App
|
|
6
|
+
|
|
7
|
+
def setup
|
|
8
|
+
render_mode(P3D)
|
|
9
|
+
no_stroke
|
|
10
|
+
color_mode(RGB, 1)
|
|
11
|
+
fill 0.4
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def draw
|
|
15
|
+
background 0
|
|
16
|
+
translate( width/2, height/2 )
|
|
17
|
+
light_specular(1, 1, 1)
|
|
18
|
+
directional_light(0.8, 0.8, 0.8, 0, 0, -1)
|
|
19
|
+
s = mouse_x.to_f / width.to_f
|
|
20
|
+
specular s, s, s
|
|
21
|
+
sphere 50
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
Reflection.new(:width => 200, :height => 200, :title => "Reflection")
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'ruby-processing'
|
|
2
|
+
|
|
3
|
+
class SimpleBuffer < Processing::App
|
|
4
|
+
def setup
|
|
5
|
+
|
|
6
|
+
# With Processing, buffers allow you to draw off-screen to an image,
|
|
7
|
+
# and then use that image in your sketch. This can speed up rendering
|
|
8
|
+
# times quite a bit, as it's not only faster to draw off-screen, but
|
|
9
|
+
# it also allows you to redraw only portions of the screen.
|
|
10
|
+
|
|
11
|
+
# Ruby-Processing provides a convenience method, "buffer", which
|
|
12
|
+
# sets up a buffer for you with the same width and height and
|
|
13
|
+
# renderer as the current sketch, and yields it to you. It also
|
|
14
|
+
# takes care of calling begin_draw and end_draw at the start and
|
|
15
|
+
# end of the block. Use it like so:
|
|
16
|
+
|
|
17
|
+
@buffer = buffer do |b|
|
|
18
|
+
b.no_stroke
|
|
19
|
+
b.fill 255, 0, 0
|
|
20
|
+
b.rect 100, 200, 100, 100
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Those lines are equivalent to the following lines:
|
|
24
|
+
|
|
25
|
+
@buffer_2 = create_graphics(500, 500, P3D)
|
|
26
|
+
@buffer_2.begin_draw
|
|
27
|
+
@buffer_2.no_stroke
|
|
28
|
+
@buffer_2.fill(255, 0, 0)
|
|
29
|
+
@buffer_2.rect(100, 200, 100, 100)
|
|
30
|
+
@buffer_2.end_draw
|
|
31
|
+
|
|
32
|
+
# If you'd like to set the size or renderer for the buffer block,
|
|
33
|
+
# just pass it in like normal:
|
|
34
|
+
|
|
35
|
+
@buffer_3 = buffer(150, 150, P3D) do |b|
|
|
36
|
+
# b.whatever goes here.
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# And now we go ahead and grab the rendered image from the first buffer.
|
|
40
|
+
@img = @buffer.get(0, 0, @buffer.width, @buffer.height)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def draw
|
|
44
|
+
background 0
|
|
45
|
+
image @img, frame_count, 0
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
SimpleBuffer.new :title => "Simple Buffer", :width => 500, :height => 500
|