LNS007 Bitmap拡張

Bitmapの機能を拡張します。何度目か分からない車輪の再発明です。





基本情報

前提スクリプト


挿入位置



説明

概要

 Bitmapクラスに図形描画用のメソッドをいくつか追加します。全ての描画メソッドがスクリプト上で実装されているため、DLLを用いた拡張に比べ動作は遅くなります。

◆ メソッド一覧

● draw_line(x1, y1, x2, y2[, color])

● draw_line(rect[, color])

指定座標を結ぶ直線を描画します。ブレゼンハムのアルゴリズムを利用した高速な描画を行います。
colorを省略した場合はフォントの色が使われます。上の形式の場合は (x1, y1) から (x2, y2) に至る直線を、下の形式の場合は矩形の左上から右下までを結ぶ直線を描きます。

● draw_line_g(x1, y1, x2, y2[, color1[, color2]])

● draw_line_g(rect[, color1[, color2]])

指定座標を結ぶ直線をグラデーションさせながら描画します。draw_line に比べて数十倍の時間がかかるため短時間での多用は避けたほうがいいです。
color1
始点の色(省略時 / nil の場合は文字色と同じ)
color2
終点の色(省略時 / nil の場合は color1 と同じ)

● draw_line_a(x1, y1, x2, y2[, color])

● draw_line_ag(x1, y1, x2, y2[, color1[, color2]])

基本的に draw_line または draw_line_g と同じですが、アンチエイリアスを適用しよりなめらかな直線を描画します。矩形範囲を指定する形式も可能です。
この処理には時間がかかるため、毎フレーム呼び出すような用途には向きません。

● draw_line_a2(x1, y1, x2, y2[, color])

● draw_line_ag2(x1, y1, x2, y2[, color1[, color2]])

アンチエイリアス直線描画のブレンド版です。draw_line_a よりさらに時間がかかります。
ブレンド版メソッドは、複数の線を重なるように引いたとき、重なる部分があとから引いた線に上書きされないようになります。
draw_line_a の他、「_a」で終わるアンチエイリアス描画メソッドについては同様にブレンド版が用意されています。

● draw_rect(x, y, width, height[, color])

● draw_rect(rect[, color])

矩形の枠を描画します。fill_rect が内側を塗りつぶすのに対して、こちらは枠だけを描画するメソッドです。引数の形式は基本的に fill_rect と同じですが、color を省略した場合はフォントの色が使われます。

● draw_multiangle(x1, y1, x2, y2, ... xn, yn[, color])

● draw_multiangle_a(x1, y1, x2, y2, ... xn, yn[, color])

指定された頂点を持つ多角形を描画します。最初に指定された座標と最後に指定された座標を結んで多角形を閉じます。単純に指定された頂点を順に結んでいくため、指定方法によっては辺が重なって多角形ではなくなる場合があります。
指定された頂点が1個の場合は点、2個の場合は直線を描画します。エラーにはなりません。
draw_multiangle_a はアンチエイリアスを有効にした描画メソッドです。
color は他のメソッド同様、省略時にはフォントの色が使われます。

● fill_triangle(x0, y0, x1, y1, x2, y2[, color])

3つの頂点を指定し、内部を塗りつぶした三角形を描画します。color を省略した場合はフォントの色が使われます。
三点が一直線上にある場合は何もしません(警告も出ません)。

● fill_triangle_g(x0, y0, x1, y1, x2, y2[, color1[, color2[, radial]]])

3つの頂点を指定し、内部をグラデーションで塗りつぶした三角形を描画します。
このメソッドでは(x0, y0)をグラデーションの中心とし、2種類の塗り方があります。
radial が偽、または省略時
(x0, y0)から(x1, y1)までの辺Aを color1、(x0, y0)から(x2, y2)までの辺Bを color2 で描画し、その間は辺A,Bからの距離に応じてグラデーションします。
radial が真の時
点(x0, y0)をcolor1、(x1, y1)から(x2, y2)までの辺Cを color2 で描画し、その間は辺Cからの距離に応じてグラデーションします。
サンプル画像では左上の頂点が(x0, y0)になっています。

● draw_circle(ox, oy, radius[, color])

● draw_circle_a(ox, oy, radius[, color])

中心(ox, oy)、半径 radius の円周を描画します。color は他と同様です。
draw_circle_a はアンチエイリアスを有効にした描画メソッドです。

● fill_circle(ox, oy, radius[, color])

内部を塗りつぶした円を描画します。

◆ 色変更関連メソッド

元画像サンプル

● 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/11/25 アンチエイリアス描画を改善、画像保存を高速化


コメント:

すべてのコメントを見る
最終更新:2020年11月25日 23:59