ruby-processing 1.0.4 → 1.0.5

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.
Files changed (136) hide show
  1. data/CHANGELOG +8 -0
  2. data/lib/patches/JRubyApplet.diff +0 -0
  3. data/lib/patches/PATCHES.txt +0 -0
  4. data/lib/patches/PApplet.diff +0 -0
  5. data/lib/ruby-processing.rb +1 -1
  6. data/lib/ruby-processing/app.rb +20 -1
  7. data/lib/ruby-processing/exporters/base_exporter.rb +1 -1
  8. data/lib/ruby-processing/exporters/creator.rb +1 -2
  9. data/lib/ruby-processing/runner.rb +4 -3
  10. data/lib/ruby-processing/runners/watch.rb +2 -2
  11. data/lib/templates/applet/index.html.erb +1 -1
  12. metadata +2 -145
  13. data/samples/learning_processing/ABOUT +0 -11
  14. data/samples/learning_processing/chapter_01/1_stroke_and_fill.rb +0 -18
  15. data/samples/learning_processing/chapter_01/2_nofill.rb +0 -20
  16. data/samples/learning_processing/chapter_01/3_rgb_color.rb +0 -19
  17. data/samples/learning_processing/chapter_01/4_alpha_transparency.rb +0 -42
  18. data/samples/learning_processing/chapter_01/5_zoog.rb +0 -24
  19. data/samples/learning_processing/chapter_02/1_zoog_again.rb +0 -41
  20. data/samples/learning_processing/chapter_03/1_zoog_as_dynamic_sketch.rb +0 -44
  21. data/samples/learning_processing/chapter_03/2_mouse_x_and_mouse_y.rb +0 -26
  22. data/samples/learning_processing/chapter_03/3_zoog_as_dynamic_sketch_with_variation.rb +0 -41
  23. data/samples/learning_processing/chapter_03/4_drawing_a_continuous_line.rb +0 -18
  24. data/samples/learning_processing/chapter_03/5_mouse_pressed_and_key_pressed.rb +0 -29
  25. data/samples/learning_processing/chapter_03/6_interactive_zoog.rb +0 -42
  26. data/samples/learning_processing/chapter_04/1_variable_declaration.rb +0 -24
  27. data/samples/learning_processing/chapter_04/2_using_variables.rb +0 -27
  28. data/samples/learning_processing/chapter_04/3_varying_variables.rb +0 -27
  29. data/samples/learning_processing/chapter_04/4_many_variables.rb +0 -38
  30. data/samples/learning_processing/chapter_04/5_using_system_variables.rb +0 -28
  31. data/samples/learning_processing/chapter_04/6_ellipse_with_variables.rb +0 -24
  32. data/samples/learning_processing/chapter_04/7_filling_variables_with_random_values.rb +0 -27
  33. data/samples/learning_processing/chapter_04/8_variable_zoog.rb +0 -50
  34. data/samples/learning_processing/chapter_05/01_conditionals.rb +0 -31
  35. data/samples/learning_processing/chapter_05/02_more_conditionals.rb +0 -38
  36. data/samples/learning_processing/chapter_05/03_rollovers.rb +0 -34
  37. data/samples/learning_processing/chapter_05/04_hold_down_the_button.rb +0 -33
  38. data/samples/learning_processing/chapter_05/05_button_as_switch.rb +0 -39
  39. data/samples/learning_processing/chapter_05/06_bouncing_ball.rb +0 -33
  40. data/samples/learning_processing/chapter_05/07_bouncing_color.rb +0 -37
  41. data/samples/learning_processing/chapter_05/08_square_following_edge.rb +0 -59
  42. data/samples/learning_processing/chapter_05/09_simple_gravity.rb +0 -43
  43. data/samples/learning_processing/chapter_05/10_zoog_and_conditionals.rb +0 -53
  44. data/samples/learning_processing/chapter_06/01_many_lines.rb +0 -29
  45. data/samples/learning_processing/chapter_06/02_many_lines_with_variables.rb +0 -53
  46. data/samples/learning_processing/chapter_06/03_while_loop.rb +0 -30
  47. data/samples/learning_processing/chapter_06/04_infinite_loop.rb +0 -25
  48. data/samples/learning_processing/chapter_06/05_another_infinite_loop.rb +0 -33
  49. data/samples/learning_processing/chapter_06/06_legs_with_a_for_loop.rb +0 -41
  50. data/samples/learning_processing/chapter_06/07_local_variables.rb +0 -39
  51. data/samples/learning_processing/chapter_06/08_lines_one_at_a_time.rb +0 -30
  52. data/samples/learning_processing/chapter_06/09_simple_while_loop_with_interactivity.rb +0 -41
  53. data/samples/learning_processing/chapter_06/10_zoog_with_arms.rb +0 -56
  54. data/samples/learning_processing/chapter_06/11_multiple_zoogs.rb +0 -46
  55. data/samples/learning_processing/chapter_07/01_defining_a_function.rb +0 -22
  56. data/samples/learning_processing/chapter_07/02_calling_a_function.rb +0 -22
  57. data/samples/learning_processing/chapter_07/03_bouncing_ball_with_functions.rb +0 -49
  58. data/samples/learning_processing/chapter_07/04_function_returns_distance.rb +0 -48
  59. data/samples/learning_processing/chapter_07/05_zoog_with_functions.rb +0 -71
  60. data/samples/learning_processing/chapter_08/01_car_class_and_car_variable.rb +0 -45
  61. data/samples/learning_processing/chapter_08/02_two_car_objects.rb +0 -60
  62. data/samples/learning_processing/chapter_08/03_object_oriented_zoog.rb +0 -81
  63. data/samples/learning_processing/chapter_10/01_catcher.rb +0 -35
  64. data/samples/learning_processing/chapter_10/02_bouncing_ball.rb +0 -44
  65. data/samples/learning_processing/chapter_10/03_bouncing_balls_with_intersection.rb +0 -69
  66. data/samples/learning_processing/chapter_10/04_a_timer.rb +0 -24
  67. data/samples/learning_processing/chapter_10/05_object_oriented_timer.rb +0 -42
  68. data/samples/learning_processing/chapter_10/06_simple_raindrop.rb +0 -23
  69. data/samples/learning_processing/chapter_10/07_drops_one_at_a_time.rb +0 -63
  70. data/samples/learning_processing/chapter_13/02_random_number_distribution.rb +0 -24
  71. data/samples/learning_processing/chapter_13/03_probabilities.rb +0 -33
  72. data/samples/learning_processing/chapter_13/04_perlin_noise.rb +0 -22
  73. data/samples/learning_processing/chapter_13/06_oscillation.rb +0 -29
  74. data/samples/learning_processing/chapter_13/07_wave.rb +0 -31
  75. data/samples/learning_processing/chapter_13/08_recursion.rb +0 -30
  76. data/samples/learning_processing/chapter_13/09_two_dimensional_array.rb +0 -21
  77. data/samples/learning_processing/chapter_13/10_two_dimensional_array_with_objects.rb +0 -54
  78. data/samples/learning_processing/chapter_14/01_growing_rectangle.rb +0 -26
  79. data/samples/learning_processing/chapter_14/02_multiple_translations.rb +0 -37
  80. data/samples/learning_processing/chapter_14/03_depth_rectangle.rb +0 -29
  81. data/samples/learning_processing/chapter_14/04_pyramid_using_beingshape.rb +0 -55
  82. data/samples/learning_processing/chapter_14/05_rotate_rectangle_around_center.rb +0 -28
  83. data/samples/learning_processing/chapter_14/06_rotate_z.rb +0 -24
  84. data/samples/learning_processing/chapter_14/07_rotate_x.rb +0 -24
  85. data/samples/learning_processing/chapter_14/08_rotate_y.rb +0 -24
  86. data/samples/learning_processing/chapter_14/09_rotate_all.rb +0 -24
  87. data/samples/learning_processing/chapter_14/10_draw_pyramid.rb +0 -59
  88. data/samples/learning_processing/chapter_14/12_rotating_one_square.rb +0 -25
  89. data/samples/learning_processing/chapter_14/13_rotating_another_square.rb +0 -25
  90. data/samples/learning_processing/chapter_14/14_rotating_both_squares.rb +0 -43
  91. data/samples/learning_processing/chapter_14/15_rotating_many_things.rb +0 -56
  92. data/samples/learning_processing/chapter_14/16_simple_solar_system.rb +0 -53
  93. data/samples/learning_processing/chapter_14/17_nested_push_and_pop.rb +0 -50
  94. data/samples/learning_processing/chapter_14/18_object_oriented_solar_system.rb +0 -69
  95. data/samples/learning_processing/chapter_15/01_hello_world_image.rb +0 -20
  96. data/samples/learning_processing/chapter_15/02_image_sprite.rb +0 -29
  97. data/samples/learning_processing/chapter_15/03_swapping_images.rb +0 -25
  98. data/samples/learning_processing/chapter_15/04_image_sequence.rb +0 -22
  99. data/samples/learning_processing/chapter_15/05_setting_pixels.rb +0 -19
  100. data/samples/learning_processing/chapter_15/06_pixels_2d.rb +0 -29
  101. data/samples/learning_processing/chapter_15/07_image_pixels.rb +0 -40
  102. data/samples/learning_processing/chapter_15/08_image_brightness.rb +0 -29
  103. data/samples/learning_processing/chapter_15/09_flashlight_effect.rb +0 -42
  104. data/samples/learning_processing/chapter_15/10_brightness_threshold.rb +0 -33
  105. data/samples/learning_processing/chapter_15/11_brightness_threshold_with_filter.rb +0 -20
  106. data/samples/learning_processing/chapter_15/12_pixel_neighbour_differences.rb +0 -43
  107. data/samples/learning_processing/chapter_15/14_pointillism.rb +0 -34
  108. data/samples/learning_processing/chapter_15/15_2d_image_mapped_to_3d.rb +0 -43
  109. data/samples/learning_processing/chapter_15/data/animal0.jpg +0 -0
  110. data/samples/learning_processing/chapter_15/data/animal1.jpg +0 -0
  111. data/samples/learning_processing/chapter_15/data/animal2.jpg +0 -0
  112. data/samples/learning_processing/chapter_15/data/animal3.jpg +0 -0
  113. data/samples/learning_processing/chapter_15/data/animal4.jpg +0 -0
  114. data/samples/learning_processing/chapter_15/data/animal5.jpg +0 -0
  115. data/samples/learning_processing/chapter_15/data/animal6.jpg +0 -0
  116. data/samples/learning_processing/chapter_15/data/face.jpg +0 -0
  117. data/samples/learning_processing/chapter_15/data/mysummervacation.jpg +0 -0
  118. data/samples/learning_processing/chapter_15/data/sunflower.jpg +0 -0
  119. data/samples/learning_processing/chapter_16/01_display_video.rb +0 -25
  120. data/samples/learning_processing/chapter_16/02_manipulate_video_image.rb +0 -24
  121. data/samples/learning_processing/chapter_16/03_adjust_video_brightness.rb +0 -49
  122. data/samples/learning_processing/chapter_17/01_simple_displaying_text.rb +0 -14
  123. data/samples/learning_processing/chapter_17/02_text_align.rb +0 -21
  124. data/samples/learning_processing/chapter_17/03_scrolling_headlines.rb +0 -35
  125. data/samples/learning_processing/chapter_17/04_text_mirror.rb +0 -68
  126. data/samples/learning_processing/chapter_17/05_rotating_text.rb +0 -22
  127. data/samples/learning_processing/chapter_17/06_text_breaking_up.rb +0 -73
  128. data/samples/learning_processing/chapter_17/07_boxes_along_a_curve.rb +0 -49
  129. data/samples/learning_processing/chapter_17/08_characters_along_a_curve.rb +0 -51
  130. data/samples/learning_processing/chapter_17/data/ArialMT-16.vlw +0 -0
  131. data/samples/learning_processing/chapter_17/data/Courier-Bold-20.vlw +0 -0
  132. data/samples/learning_processing/chapter_18/01_user_input.rb +0 -39
  133. data/samples/learning_processing/chapter_18/02_graphing_comma_separated_numbers_from_a_text_file.rb +0 -28
  134. data/samples/learning_processing/chapter_18/03_creating_object_from_a_text_file.rb +0 -64
  135. data/samples/learning_processing/chapter_18/data/data-1.txt +0 -1
  136. data/samples/learning_processing/chapter_18/data/data-2.txt +0 -10
@@ -1,42 +0,0 @@
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
-
@@ -1,33 +0,0 @@
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
-
@@ -1,20 +0,0 @@
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
-
@@ -1,43 +0,0 @@
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
-
@@ -1,34 +0,0 @@
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
-
@@ -1,43 +0,0 @@
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
-
@@ -1,25 +0,0 @@
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
- import "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
@@ -1,24 +0,0 @@
1
- require 'ruby-processing'
2
-
3
- class ManipulateVideoImageSketch < Processing::App
4
-
5
- load_library "video"
6
- import "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
@@ -1,49 +0,0 @@
1
- # Example 16-3: Adjust video brightness
2
- require 'ruby-processing'
3
-
4
- class AdjustVideoBrightness < Processing::App
5
- load_library "video"
6
- import "processing.video"
7
-
8
- def setup
9
- size 240, 180, P3D
10
-
11
- # Initialize Capture object via Constructor
12
- # video is 320 x 240, @15 fps
13
- @video = Capture.new self, 240, 180, 15
14
- background 0
15
- end
16
-
17
- def draw
18
- # Check to see if a new frame is available
19
- # If so, read it.
20
- @video.read if @video.available?
21
-
22
- load_pixels
23
- @video.load_pixels
24
- pixs = @video.pixels
25
- mx, my = mouse_x, mouse_y
26
- max_dist = 100
27
- vid_width, vid_height = @video.width, @video.height
28
-
29
- vid_width.times do |x|
30
- vid_height.times do |y|
31
- # Calculate the 1D location from a 2D grid
32
- loc = x + y * vid_width
33
- pix = pixs[loc]
34
-
35
- # Calculate an amount to change brightness based on proximity to the mouse
36
- d = dist(x, y, mx, my)
37
- fudge = (max_dist - d) / max_dist
38
- r, g, b = red(pix) * fudge, green(pix) * fudge, blue(pix) * fudge
39
-
40
- # Make a new color and set pixel in the window
41
- pixels[loc] = color(r, g, b)
42
- end
43
- end
44
- update_pixels
45
- end
46
-
47
- end
48
-
49
- AdjustVideoBrightness.new :title => "Adjust Video Brightness"
@@ -1,14 +0,0 @@
1
- def setup
2
- size 200, 200
3
- # Load Font
4
- @font = loadFont "ArialMT-16.vlw"
5
- end
6
-
7
- def draw
8
- background 255
9
- text_font @font, 16 # Specify font to be used
10
- fill 0 # Specify font color
11
-
12
- # Display Text
13
- text "Mmmmm ... Strings ..." , 10, 100
14
- end
@@ -1,21 +0,0 @@
1
- def setup
2
- size 400, 200
3
- @font = create_font "Arial", 16, true
4
- end
5
-
6
- def draw
7
- background 255
8
- stroke 175
9
- line width/2, 0, width/2, height
10
- text_font @font
11
- fill 0
12
-
13
- # text_align sets the alignment for displaying text.
14
- # It takes one argument: CENTER, LEFT, or RIGHT.
15
- text_align CENTER
16
- text "This text is centered.", width / 2, 60
17
- text_align LEFT
18
- text "This text is left aligned.", width/2, 100
19
- text_align RIGHT
20
- text "This text is right aligned.", width / 2, 140
21
- end
@@ -1,35 +0,0 @@
1
- HEADLINES = "Processing downloads break downloading record.",
2
- "New study shows computer programming lowers cholesterol."
3
-
4
- def setup
5
- size 400, 200
6
- @f = create_font "Arial" ,16, true
7
- @x = width
8
- @index = 0
9
- end
10
-
11
- def draw
12
- background 255
13
- fill 0
14
-
15
- # Display headline at x location
16
- text_font @f, 16
17
- text_align LEFT
18
-
19
- # A specific string from the array is displayed according to the value
20
- # of the "index" variable.
21
- text HEADLINES[@index], @x, 180
22
-
23
- # Decrement x
24
- @x = @x - 3
25
-
26
- # If x is less than the negative width, then it is off the screen
27
- # text_width is used to calculate the width of the current string.
28
- w = text_width(HEADLINES[@index])
29
- if (@x < -w)
30
- @x = width
31
- # @index is incremented when the current string has left
32
- # the screen in order to display a new string.
33
- @index = (@index + 1) % HEADLINES.length
34
- end
35
- end
@@ -1,68 +0,0 @@
1
- # This example demonstrates how to use the video library. You'll need a
2
- # video camera hooked in to your computer.
3
-
4
- class TextMirror < Processing::App
5
- load_library "video"
6
- import "processing.video"
7
-
8
- # Size of each cell in the grid, ratio of window size to video size
9
- VIDEOSCALE = 14
10
-
11
- # The source text used in the mosaic pattern.
12
- # A longer String might produce more interesting results.
13
- CHARS = "thetextmirror"
14
-
15
- def setup
16
- size 640, 480
17
- smooth
18
- # Set up columns and rows
19
- @cols = width / VIDEOSCALE # Number of columns and...
20
- @rows = height / VIDEOSCALE # rows in our system
21
- @video = Capture.new(self, @cols, @rows, 15)
22
-
23
- # Load the font
24
- # Using a fixed-width font. In most fonts, individual characters have different widths.
25
- # In a fixed-width font, all characters have the same width.
26
- # This is useful here since we intend to display the letters one at a time spaced out evenly.
27
- # See Section 17.7 for how to display text character by character with a nonfixed width font.
28
- @f = load_font "Courier-Bold-20.vlw"
29
- end
30
-
31
- def draw
32
- background 0
33
-
34
- # Read image from the camera
35
- @video.read if @video.available?
36
- @video.load_pixels
37
-
38
- # Use a variable to count through chars in String
39
- charcount = 0
40
- # Begin loop for rows
41
- @rows.times do |j|
42
- # Begin loop for columns
43
- @cols.times do |i|
44
-
45
- # Where are we, pixel-wise?
46
- x = i * VIDEOSCALE
47
- y = j * VIDEOSCALE
48
-
49
- # Looking up the appropriate color in the pixel array
50
- c = @video.pixels[i + j * @video.width]
51
-
52
- # Displaying an individual character from the String instead of a rectangle
53
- text_font @f
54
- fill c
55
-
56
- # One character from the source text is displayed colored accordingly to the pixel location.
57
- # A counter variableâ charcountâ is used to walk through the source String one character at a time.
58
- text CHARS[charcount].chr, x, y
59
-
60
- # Go on to the next character
61
- charcount = (charcount + 1) % CHARS.length
62
- end
63
- end
64
- end
65
-
66
- end
67
-
68
- TextMirror.new :title => "Text Mirror"