32bit αチャンネル付きの画像を表すクラスです。
対応形式は PNG のみです。αチャンネルつきの形式もサポートします。
(今考えると Texture という名前は妙なので、メジャーバージョンを上げるタイミングでクラス名を変えるかもしれません。)
パレットについて
Ver 0.3.0 からパレット画像のパレット情報を利用することができるようになりました。
ロード時に以下のようにオプションを指定する必要があります。
Texture.load("foo", :palette => true)
パレットを持つテクスチャには、以下の制約があります。
- ピクセルを直接変更するようなメソッドを呼ぶとエラーになります。
- パレットテクスチャを複製 (dup/clone) したテクスチャもパレットテクスチャになります。
クラスメソッド
Texture.load(path_or_io, options = {})-
画像を指定したファイル名または IO オブジェクトから読み込み、テクスチャを生成します。拡張子を省略することができます。
optionsにはHashを指定します。指定できるキーと値は、以下の通りです。キー 値 デフォルト値 :io_length読み込むバイト数。 nil の場合は EOF に達するまで読みます。 path_or_ioに IO オブジェクトを指定した場合にのみ有効です。nil:paletteパレット情報を保持するかどうかをあらわす真偽値。この値が真値で、かつロードしようとする画像がパレット画像である場合、パレットを保持します。 false Texture.new(width, height)-
指定した大きさの新しいテクスチャを生成します。画素は全て、
StarRuby::Color.new(0, 0, 0, 0)と表される値です。
インスタンスメソッド
[](x, y)[]=(x, y, color)-
(
x,y) 座標のピクセルの色 (Color) を取得または設定します。render_pixel メソッドとは異なり、設定時に下地を考慮しません。
change_hue(d_hue)change_hue!(d_hue)-
色相を変化させます。
change_hueメソッドは新しいテクスチャを生成して返します。change_hue!メソッドはselfを破壊的に変更します。d_hueはラジアンで指定します。Numeric#degreeメソッドを利用するとあたかも 360 度系で指定したかのように書けます。0 の場合色相を変化させません。
変換は不可逆変換で、多少の誤差を含みます。
パレット画像に対してこのメソッドを呼び出した場合、パレットの色相を変更した後にピクセルを変化させます。
(Ver 0.1.5 以前は、 change_hue が破壊的メソッドでした。)
change_palette(palette)change_palette!(palette)-
パレットを変更します。
change_paletteメソッドは新しいテクスチャを生成して返します。change_palette!メソッドはselfを破壊的に変更します。パレットを変更すると、それに合わせてピクセルも変更されます。paletteはColorオブジェクトの配列を指定します。パレットを持たない画像に対してこれらのメソッドを呼び出すとエラーになります。
clear-
画素を全て消去します。
fill(Color.new(0, 0, 0, 0))と等価です。selfを返します (Ver 0.3.1 から)。 clonedup-
テクスチャの複製を返します。
パレット情報を持っていた場合、それもコピーされます。
dispose-
テクスチャのリソースを解放します。
disposed?-
disposeによってリソースが解放済みならばtrue、それ以外の場合はfalseを返します。 dump(format)-
ピクセルデータをダンプします。バイト列を表す
Stringオブジェクトを返します。返値のStringオブジェクトの長さは、「テクスチャの幅×テクスチャの高さ×フォーマットの長さ」です。formatは以下の文字一文字以上から構成される文字列です。文字 意味 r赤色成分。 g緑色成分。 b青色成分。 aα値の成分。 たとえば
formatに"rgba"と指定した場合、返り値は「赤色、緑色、青色、α」とピクセル分並んだStringオブジェクトとなります。ピクセルの並び順は、左から右、上から下です。
undumpも参照してください。 fill(color)-
colorで指定した色 (Color) でテクスチャを塗りつぶします。描画先 (self) のもともとの色は無視されます。selfを返します (Ver 0.3.1 から)。 fill_rect(x, y, width, height, color)-
colorで指定した色 (Color) でテクスチャを矩形状に塗りつぶします。render_rectメソッドとは異なり、塗りつぶされる範囲内では、描画先 (self) のもともと色は無視されます。selfを返します (Ver 0.3.1 から)。 height-
高さを取得します。
palette-
パレットをあらわす
Colorオブジェクトの frozen な配列を返します。 render_in_perspective(texture, options = {})-
透視変換描画を行います。
selfを描画先のスクリーン、引数のtextureを地面の画像と見立てます。selfを返します (Ver 0.3.1 から)。optionsにはHashを指定します。指定できるキーと値は、以下の通りです。キー 値 デフォルト値 :blur水平線近くのぼかし方。 :backgroundを指定すると、水平線のα値が 0 になるようなグラデーションになります。Colorオブジェクトを指定すると、水平線がその色になるようなグラデーションになります。 (Ver 0.1.17 から)nil:camera_x/:camera_yカメラの座標。原点は textureの左上点です。0 :camera_heightカメラの地面からの高さ。負の値も指定できます。 0 のときは何も描画されません。 0 :camera_yaw/:camera_pitch/:camera_rollそれぞれカメラの左右方向の角度、上下方向の角度、視線を軸とした回転角度。 0 :intersection_x/:intersection_yカメラの視線とスクリーンとの交点の座標。原点はスクリーン ( self) の左上点です。0 (Ver 0.3.1 以前)、 テクスチャの幅または高さの半分 (Ver 0.3.2 以降) :view_angle視野角 (ラジアンで 0 より大きく π より小さい値)。 π/4 :loopテクスチャをループして描画するか否かを表す真偽値。 falseカメラの角度の単位はラジアンです。
Numeric#degreeメソッドを利用するとあたかも 360 度系で指定したかのように書けます。Texture#transform_in_perspectiveメソッドも参照してください。 render_line(x1, y1, x2, y2, color)-
(
x1,y1) を始点、 (x2,y2) を終点として、色colorの線分を描画します。selfを返します (Ver 0.3.1 から)。 render_pixel(x, y, color)-
座標 (
x,y) に、色colorの点を描画します。[]メソッドとは異なり、colorのアルファ値が 255 未満の場合に、下地を考慮して描画します。selfを返します (Ver 0.3.1 から)。 render_rect(x, y, width, height, color)-
colorで指定した色 (Color) でテクスチャを矩形状に描画します。flll_rectメソッドとは異なり、colorのアルファ値が 255 未満の場合に、下地を考慮して描画します。selfを返します (Ver 0.3.1 から)。 render_text(text, x, y, font, color, anti_alias = false)-
位置 (
x,y) に文字列textを描画します。fontには文字のフォントを表すFontオブジェクトを指定します。colorには描画色を表すColorオブジェクトを指定します。anti_aliasには、アンチエイリアスをかけるかどうかを表す真偽値を指定します。文字
textは UTF-8 である必要があります。selfを返します (Ver 0.3.1 から)。 render_texture(texture, x, y, options = {})-
位置 (
x,y) にテクスチャtextureを描画します。textureにselfを指定することもできます。(αブレンディングのルールをあとで書く)
転送先 (
self) のピクセルごとのα値は、転送元 (texture) と転送先のα値のうち、小さくない方が用いられます。selfを返します (Ver 0.3.1 から)。optionsにはHashを指定します。指定できるキーと値は、以下の通りです。キー 値 デフォルト値 :alpha不透明度 (0 〜 255)。 255 :angle回転角度。単位はラジアンです。 Numeric#degreeメソッドを利用するとあたかも 360 度系で指定したかのように書けます。0 :blend_typeブレンドの種類。 :alphaで通常のα合成、:addで加算合成、:subで減算合成を行います。:maskを指定すると、textureを白黒のマスク画像 (白が 255 で黒が 0) と見なし、selfの α 値をセットします (Ver 0.2.0 から)。他:noneを指定した場合、描画先を無視して描画します (Ver 0.1.16 から)。:alpha:center_x/:center_y幾何変換の中心の X、 Y 座標。原点はテクスチャの転送元矩形の左上点です。 0 :matrix幾何変換のための二次正方行列を指定します。 4 要素の配列または 2 要素の配列 2 つが要素となる配列を指定します。 (Ver 0.3.2 から) [1, 0, 0, 1]:saturation彩度 (0 〜 255)。 0 で完全にモノクロになります。 255 :scale_x/:scale_yX、 Y 軸方向の拡大率。負の値を指定すると反転描画します。 1 :src_width/:src_height描画元矩形の幅、高さ。 描画元画像幅、高さから、それぞれ :src_x、:src_yで指定した値を引いた値:src_x/:src_y描画元矩形の X、 Y 座標。 0 :tone_red/:tone_green/:tone_blue色調変換の成分 (-255 〜 255)。負の値を指定するとその成分を弱め、正の値を指定するとその成分を強めます。 0 幾何変換は、以下の順に行われます。
:center_x、:center_yで指定した座標を中心に:matrixで指定した行列による幾何変換を行う。:center_x、:center_yで指定した座標を中心に拡大縮小変換を行う。:center_x、:center_yで指定した座標を中心に回転変換を行う。- (
x,y) だけ平行移動する。
色調変換は、以下の順に行われます。
:saturationで指定した彩度変換を行う。:tone_red/:tone_green/:tone_blueで指定した色調変換を行う。
save(path)-
テクスチャを、
pathに PNG 形式で保存します。(過去のバージョンで第 2 引数がありましたが、撤廃されました。)
size-
大きさを表す配列 ([(幅), (高さ)]) を返します。
transform_in_perspective(x, y, height, options = {})-
透視変換を行ったときの、スクリーン (
self) における座標およびスケール (拡大率) を取得します。物体が地面の座標 (x,y) および地面からの高さheightの位置にある場合の、スクリーンに投影した座標およびスケールです。返り値は [(X 座標), (Y 座標), (スケール)] と表される配列です。 X 座標、 Y 座標は
Fixnum、スケールはFloorの値となります。座標値がFixnumの範囲を超える場合、その要素はnilとなります。そのため実際に使う場合は、すべての値がnilでないことを確認する必要があります。スケールは負の値の場合もあります。optionsにはHashを指定します。指定できるキーと値は、Texture#render_in_perspectiveメソッドを参照してください。 undump(data, format)-
dataで指定されたピクセルデータを表すStringオブジェクトを、formatの形式に従ってピクセルデータに適用します。dataおよびformatの形式は、それぞれdumpメソッドの返り値、引数を参照してください。データの長さは「テクスチャの幅×テクスチャの高さ×フォーマットの長さ」で、過不足なくなければなりません。
dumpも参照してください。 width-
幅を取得します。