独学ツクールブログ

ツクールでのオリジナル作品の話を中心に創作関係の徒然な語り。

<< 今週の三村かな子(2015/02/21) | main | 真・プリセットスクリプトフルグレードアップ計画4:Colorのいろいろ >>

[ - ] スポンサーサイト

一定期間更新がないため広告を表示しています

| 2018.05.23 Wednesday | - | - |

[ RGSS奮闘記 ] 真・プリセットスクリプトフルグレードアップ計画3:Bitmapのあれこれ

今回は、Bitmapクラスの大幅強化。
素材にもある袋文字などの機能を持ち込む。



class Bitmap
  def draw_hemming_text(*args)
    set_parameters(*args)
    (-1..1).each {|y_shift|
      (-1..1).each {|x_shift|
         draw_text(@x + x_shift, @y + y_shift, @width, @height, @text, @align)
      }
    }
    font.color = @origin_color
    draw_text(@x, @y, @width, @height, @text, @align)
    clear_parameters
  end
  def draw_shadowed_text(*args)
    set_parameters(*args)
    draw_text(@x + 1, @y + 1, @width, @height, @text, @align)
    font.color = @origin_color
    draw_text(@x, @y, @width, @height, @text, @align)
    clear_parameters
  end
  
  def save_to_bmp(save_filename)
    @padding  = width % 4
    @bytes_size = (width * 3 + @padding) * height
    File.open(save_filename, "wb") {|f|
      f.write [66, 77, @bytes_size + 54, 0, 0, 54].pack("C2Vv2V")
      f.write [40, width, height, 1, 24, 0,
               @bytes_size, 0, 0, 0, 0].pack("V3v2V6")
      height.times{|h|
        width.times{|w|
          f.write get_pixel(w, height - h - 1).to_a[0..2].reverse.pack("C3")
        }
        @padding.times {f.write "¥x0"}
      }
    }
  end
  def save_to_png(filename, alpha = false)
    signeture = "¥x89¥x50¥x4E¥x47¥xD¥xA¥x1A¥xA"
    ihdr = chunk("IHDR", [width, height, 8, (alpha ? 6 : 2), 0, 0, 0].pack("N2C5"))
    d = []
    height.times{|y|
      d << 0
      width.times{|x|
        c = get_pixel(x,y)
        d << c.to_a[0..(alpha ? 3 : 2)]
      }
    }
    idat = chunk("IDAT", Zlib::Deflate.deflate(d.flatten.pack("C*")))
    iend = chunk("IEND", "")
    File.open(filename, "wb") {|f|
      f.write signeture
      f.write ihdr
      f.write idat
      f.write iend
    }
  end
  def save_to_gpng(filename, alpha = false)
    signeture = "¥x89¥x50¥x4E¥x47¥xD¥xA¥x1A¥xA"
    ihdr = chunk("IHDR", [width, height, 8, (alpha ? 4 : 0), 0, 0, 0].pack("N2C5"))
    d = []
    height.times{|y|
      d << 0
      width.times{|x|
        c = get_pixel(x,y)
        d << ((c.red * 77 + c.green * 150 + c.blue * 29).to_i >> 8)
        d << c.alpha if alpha
      }
    }
    idat = chunk("IDAT", Zlib::Deflate.deflate(d.flatten.pack("C*")))
    iend = chunk("IEND", "")
    File.open(filename, "wb") {|f|
      f.write signeture
      f.write ihdr
      f.write idat
      f.write iend
    }
  end

  private
  def set_parameters(*args)
    if args[0].instance_of?(Rect)
      if args.size >= 2 && args.size <= 4
        @x, @y, @width, @height = args[0].to_a
        @text                   = args[1]
        color                   = args[2] || Color.new(0, 0, 0)
        @align                  = args[3] || 0
      else
        raise(ArgumentError, "wrong number of arguments(#{args.size} of #{args.size < 2 ? 2 : 4})")
      end
    else
      if args.size >= 5 && args.size <= 7
        @x, @y, @width, @height, @text = args[0..4]
        color                          = args[5] || Color.new(0, 0, 0)
        @align                         = args[6] || 0
      else
        raise(ArgumentError, "wrong number of arguments(#{args.size} of #{args.size < 5 ? 5 : 7})")
      end
    end
    @origin_color = self.font.color.dup
    self.font.color = color
  end
  def chunk(name, data)
    [data.size, name, data, Zlib.crc32(name + data)].pack("NA4A*N")
  end
  def clear_parameters
    @x = nil
    @y = nil
    @width = nil
    @height = nil
    @text = nil
    @align = nil
    @origin_color = nil
  end
end


袋文字と影付き文字はベーススクリプトにあるものなので詳細は省略。
save_to_bmp、save_to_png、save_to_gpngは、ずっと素材化できずにいる拡張機能。これを使うだけでBitmapクラスのインスタンスを画像ファイルに保存できる。
ちなみに、JPGはともかくGIFはいつか追加できるかも。


タグ:[RGSS] [フルグレードアップ計画]

| 2015.02.22 Sunday 22:22 | comments(0) | trackbacks(0) |

[ - ] スポンサーサイト

| 2018.05.23 Wednesday 22:22 | - | - |

コメント

コメントする






この記事のトラックバックURL

トラックバック

このページの先頭へ▲

Twitter

WebClap

Blogram

ブログランキングならblogram

calendar

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
2728293031  
<< October 2019 >>

categories

archives

Amazon

selected entries

recent comment

recent trackback

recent ranking

links

search this site.

sponsored links

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM