이미지를 실시간으로 회색조로 만드는 프로그램

하는 by 칠판Image#map_pixels 를 사용해 썼다. 이런 것은 RubyKokuban이 잘하고 있다.

gray-anim.gif
def setup
  set_window_size(520, 420)
  set_background(Color::Linen)
  @image = Image.load("red-flower.jpg")
  @rate = 0.0
  @frame = 0
  @image_gray = gray(@image, @rate)
end

def update
  @frame += 1
  @rate += 0.003
  @rate -= 1.0 if @rate > 1.0
  @image_gray = gray(@image, @rate) if @frame % 10 == 0

  # @sequence_shot = SequenceShot.new(10, 40) unless @sequence_shot
  # @sequence_shot.update
end

def draw
  x = 10; y = 30
  set_color(Color::White)
  @image_gray.draw(x, y, @image_gray.width * 2.5, @image_gray.height * 2.5)

  # debug info
  set_color(0, 0, 0)
  # text(DebugInfo.fps, 10, 15)
  text("gray rate: #{@rate}", 10, 15)
end

# ----------------------------------------------------------

def gray(image, rate)
  image.map_pixels do |x, y|
    c = image.color(x, y)
    b = c.brightness
    Color.new(c.r * (1.0 - rate) + b * rate,
              c.g * (1.0 - rate) + b * rate,
              c.b * (1.0 - rate) + b * rate,
              c.a)
  end
end

gif 애니메이션을 만드는 방법


  # @sequence_shot = SequenceShot.new(10, 40) unless @sequence_shot
  # @sequence_shot.update

을 코멘트 아웃을 제외하고 실행하면 sequence_shot_xxx.png 라는 이름으로 연속 이미지가 만들어진다.

그런 다음 ImageMagick을 사용하여gif 애니메이션으로 변환합니다.
$ convert -layers optimize -loop 0 -delay 36 sequence_shot_*.png gray_anim.gif

좋은 웹페이지 즐겨찾기