It''s not really important, since image.rb is just a demo, but I was tired of waiting for it to start up when I was playing around with it, so I made the changes below, and got the following speed up: $ time ruby-stable-snapshot image2.rb ruby-stable-snapshot image2.rb 0.79s user 0.12s system 38% cpu 2.377 total $ time ruby-stable-snapshot image.rb ruby-stable-snapshot image.rb 6.97s user 0.80s system 84% cpu 9.223 total $ diff -u image.rb image2.rb --- image.rb 2004-10-25 17:38:35.000000000 -0700 +++ image2.rb 2004-11-13 18:22:24.000000000 -0800 @@ -114,26 +114,32 @@ @picture = FXBMPImage.new(getApp(), nil, IMAGE_SHMI|IMAGE_SHMP, 850, 600) # Fill up the color-ramp byte arrays (strings) - (0...512).each { |x| - (0...50).each { |y| - @grey.data[3*(y*512+x) ] = (x/2) - @grey.data[3*(y*512+x)+1] = (x/2) - @grey.data[3*(y*512+x)+2] = (x/2) - } - (0...50).each { |y| - @red.data[3*(y*512+x) ] = (x/2) - @red.data[3*(y*512+x)+1] = 0 - @red.data[3*(y*512+x)+2] = 0 - } - (0...50).each { |y| - @green.data[3*(y*512+x) ] = 0 - @green.data[3*(y*512+x)+1] = (x/2) - @green.data[3*(y*512+x)+2] = 0 - } - (0...50).each { |y| - @blue.data[3*(y*512+x) ] = 0 - @blue.data[3*(y*512+x)+1] = 0 - @blue.data[3*(y*512+x)+2] = (x/2) + grey_data = @grey.data + red_data = @red.data + green_data = @green.data + blue_data = @blue.data + + (0...50).each { |y| + y_times_512 = y*512 + (0...512).each { |x| + i = 3*(y_times_512+x) + x_div_2 = x/2 + + grey_data[i ] = x_div_2 + grey_data[i+1] = x_div_2 + grey_data[i+2] = x_div_2 + + red_data[i ] = x_div_2 + #red_data[i+1] = 0 + #red_data[i+2] = 0 + + #green_data[i ] = 0 + green_data[i+1] = x_div_2 + #green_data[i+2] = 0 + + #blue_data[i ] = 0 + #blue_data[i+1] = 0 + blue_data[i+2] = x_div_2 } }