#!/usr/local/bin/ruby -w
require 'RMagick'

# Demonstrate the Image#raise method.
# Make a raised "button" with the b&w cartoon
# image of a snake on a granite background.

# Read the snake image, convert it to b&w with quantize,
# then use matte_replace to make its background transparent.

begin
    snake = Magick::Image.read('images/Snake.wmf').first

    # This call to zoom demonstrates that the zoom doesn't have
    # to be proportional. The snake looks pretty good at this size.
    snake.resize!(snake.columns/2, snake.rows/4)
    snake = snake.quantize(256, Magick::GRAYColorspace)
    snake = snake.matte_replace(0,0)

    # Now make the button background using ImageListMagick's
    # builtin "granite" image format.  Make the background
    # a bit larger than the snake so the snake's edges
    # don't get folded into the raised edges of the background.
    granite = Magick::Image.read('granite:').first
    granite_fill = Magick::TextureFill.new(granite)
    bg = Magick::Image.new(snake.columns+20, snake.rows+20, granite_fill)

    # Here's the call to raise. Take all the defaults: the raised edges
    # will be 6 pixels wide and the result will look raised instead of lowered.
    bg = bg.raise

    # Composite the snake over the background. Since the snake's background
    # is transparent, the granite texture will show through nicely.
    result = bg.composite(snake, Magick::CenterGravity, Magick::OverCompositeOp)
    #result.display
    result.write('raise.gif')

rescue Magick::ImageMagickError
	puts "#{$0}: ImageMagickError - #{$!}"
end
exit
