LNS032 Bitmapメモリ干渉

Bitmap に、メモリに直接干渉し色を変更するなどの機能を追加します。画像保存もできるようになります。






基本情報

前提スクリプト


拡張タイプ

△ 開発用 (導入するだけでは特に変化しない)


説明

概要

追加されるメソッドは縮小色変換画像保存の 3 グループがあります。

元画像サンプル

縮小

● shrink(div[, alpha])

● shrink2(div)

shrink(2, true) shrink(3, true) shrink2(2) shrink2(3)
画像を div 倍に縮小したビットマップを返します。
  • shrink は面積平均法を利用した高品質な縮小メソッドですが、非常に時間がかかります。
    • alpha を省略時、または偽にした場合、アルファ値(透明度情報)を無視して縮小を行います。
      • 若干速くなりますが、元の画像で透明だった部分は「黒」で塗りつぶされます。
    • alpha が真の場合、透明度を考慮した縮小を行います。
  • shrink2 は Bitmap#blt を利用した面積平均法もどきで、shrinkよりは遥かに高速ですが、蓄積誤差の影響で元の画像から多少色味が変わる可能性があります。

色変換

● convert_color(dest, src[, swap])

convert_color(:red, :green) convert_color(:red, :green, true)
dest で指定されたRGB値を src に変更します。自身を変更するメソッドです。
convert_color(:alpha, :red) とすると、赤の値を基準に不透明度に変換できます。
この処理は時間がかかるため、頻繁な呼び出しは避けてください。特に swap が有効な場合、非常に時間がかかります。
dest
変更するRGB値。シンボル(:red, :green, :blue, :alpha)で指定します。
src
参照するRGB値。シンボルまたは定数(0-255の整数)で指定します。
swap
変更先と参照元の値を入れ替えます。src がシンボルの場合のみ有効です。

● invert_color([dest])

invert_color(:red) invert_color(:alpha) invert_color(:all)
dest で指定されたRGB値を反転します。自身を変更するメソッドです。
元の値が X の場合、255 - X になります。dest を省略、または :all を指定した場合、アルファ値を除く全てが反転します。
この処理は時間がかかるため、頻繁な呼び出しは避けてください。
dest
変更するRGB値。シンボル(上記に加えて :all)で指定します。

● fill_bitmap([color[, thick]])

fill_bitmap(Color.new(255,0,0)) fill_bitmap(Color.new(255,0,0), 2)
※輪郭が少し大きくなっている
全体を指定の色で塗りつぶした新たなビットマップを生成して返します。自身は変更されません。
塗りつぶす際、不透明度は元々のビットマップのものが適用されます(引数の不透明度は無視されます)。
この処理は時間がかかるため、頻繁な呼び出しは避けてください。
color
塗りつぶす色。省略時はフォントの色が使われます。
thick
塗りつぶす輪郭の太さ。省略時は 0 (ビットマップと同じ大きさ)です。

● Cache.fill_bitmap(src_bitmap[, color[, thick[, key]]])

Bitmap#fill_bitmap のキャッシュ版です。src_bitmap にはレシーバとなるべきビットマップを指定します。key にはキャッシュの同一性判別用の文字列や数値を指定します。省略時には src_bitmap.object_id が使われるため、見た目が同じビットマップでも異なるものとして扱われることがあります。
例えばあるキャラクターの歩行グラフィックを黒塗りにする場合、key にそのキャラクターの名前を設定すれば、2回目以降の取得が高速になります。
なお、キャッシュに key が登録済みの場合、src_bitmap は無視されます。

◆ 画像保存

● save(filename[, type[, back]])

ビットマップを画像ファイルとして出力します。PNG と TIFF の場合は透過画像として出力されますが、それ以外は透過情報が失われるため、back を指定しなかった場合には画像が乱れる可能性があります。
filename
保存するファイル名。拡張子は省略できます。
type
保存形式。:png, :bmp, :jpeg, :tiff, :gif のいずれかです。省略時や不正な値が渡された場合は :png として扱われます。
back
透明部分を指定色で塗りつぶします。以下のいずれかです。
"white" -> 白 (255, 255, 255)
"black" -> 黒 (0, 0, 0)
Colorオブジェクト -> 指定の色(透明度は無視)
Arrayオブジェクト -> [red, green, blue]と解釈してその色
省略時や不正な値が渡された場合は塗りつぶしを行いません。

● save_bmp(filename, back)

● save_png(filename)

ビットマップを BMP または PNG 形式でファイルとして出力します。save_bmp では、back を省略した場合 "white" になります。


備考

再定義されるメソッド

なし

設定項目

なし


更新履歴

  • 2020/12/29 公開(旧LNS007 Bitmap拡張からメモリ関連の処理を抜き出したもの)

  • こんにちは。不具合を発見したのでご報告いたします。 LNS000 組み込み拡張 LNS010 Input拡張 LNS100 プリセット拡張 LNS102 マウス操作 LNS140 マップ/キャラ拡張 の5つを導入した状態で、マップ画面でマウスカーソルをゲームウインドウの外側で大きく動かすなどすると、「 スクリプト 'LNS 140 マップ/キャラ拡張' の 980 行目で IndexError が発生しました。 index -1 too small for array; minimum: 0 」というエラーメッセージが表示され、ゲームが終了してしまいます。 スクリプトは全て最新で、内容は改変していません。 -- 2022-07-26 01:29:40
  • 確認が遅れましたが、対応修正しました。正確には「既に対応済みであったがアップロードを忘れていた」という状態でした…… -- 2022-11-01 15:39:07
  • 対応ありがとうございます!しかし LNS000, 010, 100, 102, 140 の5つを入れた状態で起動直後に「スクリプト 'LNS140 マップ/キャラ拡張' の 1719 行目で NameError が発生しました。 undefined method 'lns102_dash?' for class 'Game_Player'」と表示され、終了します。 -- 2022-12-24 16:39:35
コメント:

すべてのコメントを見る
最終更新:2020年12月29日 01:31