[CG実習 >  Rubyによるプログラミングの基礎 >  画像の取り扱い >  Gfcリファレンスマニュアル]

Gfcリファレンスマニュアル

ここでは,実習で用いる画像ライブラリGfcの機能一覧を紹介します. 以下,gはGfcオブジェクトを表します. またpxはピクセルオブジェクトを表します. メソッドの引数で青字で示してあるものは,オプションであることを示します. オプションは,必要に応じて追加する(省略可能な)引数です.

もくじ

  1. Gfcのクラスメソッド
  2. Gfcオブジェクトに関するメソッド
  3. ピクセルに関するメソッド
  4. 多角形に関するメソッド

Gfcのクラスメソッド

g = Gfc.new(width,height,pixel_format)
g = Gfc.new("filename")
g = Gfc.new(stream)
Gfcオブジェクトgを新たに生成する. 1番目の形式では,pixel_formatで指定されたピクセルフォーマットをもつ 幅width×高さheightの画像データを新たに作成する. ピクセルフォーマットは次のいずれか.

フォーマット指定する引数
フルカラーGfc::COLOR_COLOR
グレイスケールGfc::COLOR_GRAY

ピクセルの値は,白に初期化される.
2番目の形式では,ファイルfilenameから画像を読みこむ. ファイル名が"-"の場合には,標準入力から読みこむ. 3番目の形式では,入力ストリームオブジェクトstreamから画像を読みこむ. いずれの場合も描画色は黒に初期化される.

g = Gfc.load("filename")
g = Gfc.load(stream)
Gfc.newと同様にGfcオブジェクトgを新たに生成する. 1番目の形式では,ファイルfilenameから画像を読みこむ. ファイル名が"-"の場合には,標準入力から読みこむ. 2番目の形式では,入力ストリームオブジェクトstreamから画像を読みこむ.

Gfcオブジェクトに関するメソッド

g.save("filename",format)
g.save(stream,format)
Gfcオブジェクトgの画像データをファイルに保存する. 1番目の形式では,ファイルfilenameに画像データ保存する. ファイル名が"-"の場合には,標準出力へ書き出す. 2番目の形式では,出力ストリームオブジェクトstreamに画像データに書き出す. いずれの場合も,画像フォーマットを指定しない場合には,PNG形式で保存される. 指定できる画像フォーマットは次の通り.

フォーマット指定する引数
PNGGfc::FORMAT_PNG
GIFGfc::FORMAT_GIF
JPEGGfc::FORMAT_JPG
PPM,PGMGfc::FORMAT_PNM


g0 = g.copy(x,y,w,h)
g0 = g.copy
Gfcオブジェクトgの画像の(x,y)を左上角としたw×hピクセルの矩形領域をコピーして, それを画像とする新しいGfcオブジェクトg0を生成する. 引数を与えない場合には,画像全体をそのままコピーする. 指定した領域のうち,gの画像からはみ出す部分については,黒で埋められる.

g.paste(g0,x,y)
Gfcオブジェクトgの画像の(x,y)を左上角として, Gfcオブジェクトg0の画像を貼り付ける. g0の画像がフルカラーでgの画像がグレイスケールである場合には, g0の画像はグレイスケールに変換されてから貼り付けられる.

width,height = g.size
Gfcオブジェクトgの画像のサイズ(幅,高さ)を返す.

width,height,pixel_size = g.geometry
Gfcオブジェクトgの画像の情報(幅,高さ,ピクセルサイズ)を返す. ピクセルサイズとはピクセルの色成分の数である (フルカラーなら3,グレイスケールなら1).

p = g.pixel_format
p = g.color_space
Gfcオブジェクトgの画像のピクセルフォーマットを返す. 返されるピクセルフォーマットは次のいずれか.

フォーマット返り値
フルカラーGfc::COLOR_COLOR
グレイスケールGfc::COLOR_GRAY


c = g.get_foreground
gの現在の描画色cを得る. cはピクセルオブジェクトとして得られる.

g.set_foreground(color)
gの描画色をcolorに設定する. color(のピクセル値データ)は,次のいずれかで指定する.

指定方法備考
色名"red" フルカラーのみ
輝度値配列[0xff,0x00,0x00](フルカラー),[0x7f](グレイスケール) 配列の各要素でRGBあるいは白黒の輝度値を指定する
16進数0xff0000(フルカラー),0x7f(グレイスケール) 16進数2桁ずつで各成分の輝度値を指定する. フルカラーの場合は,先頭から順番に2桁ずつでRGB成分を示す.
ピクセル ピクセルオブジェクトを直接与える

参考:定義されている色名の一覧を取得するプログラム

  cnames = Gfc::ColorTable.keys # 色名の配列
  p cnames                      # 配列の内容を表示する


px = g.new_pixel
Gfcオブジェクトgのピクセルと同じフォーマットのピクセルを新たに一つ生成する. 得られるピクセルは,gのピクセルと同じフォーマットである. ただし,gの画像とは無関係である.

px = g.pick_pixel(x,y)
px = g.read_pixel(x,y)
(x,y)のピクセルpxを取りだす.

g.draw_pixel(x,y,color)
g.write_pixel(x,y,color)
(x,y)に色を塗る. colorの指定は,set_foregroundと同様. colorを指定しなければ,現在の描画色を使う.

g.draw_hline(x0,x1,y,color)
g.write_hline(x0,x1,y,color)
(x0,y)から(x1,y)まで水平な線分を描く. colorの指定は,set_foregroundと同様. colorを指定しなければ,現在の描画色を使う.

g.draw_vline(y0,y1,x,color)
g.write_vline(y0,y1,x,color)
(x,y0)から(x,y1)まで垂直な線分を描く. colorの指定は,set_foregroundと同様. colorを指定しなければ,現在の描画色を使う.

g.draw_rect(x,y,w,h,fill,color)
g.write_rect(x,y,w,h,fill,color)
(x,y)を左上角としてw×hピクセルの長方形を描く. fillを指定しないか,fill=falseの場合は,枠のみを描く. fill=trueの場合は,中を塗りつぶす. colorの指定は,set_foregroundと同様. colorを指定しなければ,現在の描画色を使う.

g.fill(color)
g.fill
画像全体をcolorで塗りつぶす. colorの指定は,set_foregroundと同様. colorを指定しなければ,現在の描画色を使う.

g.draw_figure(fig,...)
図形オブジェクトfigをgの画像に描画するためのメソッド. figのdrawメソッドを起動する. figにdrawメソッドが定義されていること, そのメソッドがgを第1引数としてとり,figが定義する図形を線画としてgに描画することが期待されている. 引数が2個以上与えられた場合には,第2引数以降をまとめて配列にして, figのdrawメソッドに渡す.

g.fill_figure(fig,...)
図形オブジェクトfigをgの画像に描画するためのメソッド. figのfillメソッドを起動する. figにfillメソッドが定義されていること, そのメソッドがgを第1引数としてとり,figが定義する図形を塗りつぶしてgに描画することが期待されている. 引数が2個以上与えられた場合には,第2引数以降をまとめて配列にして, figのfillメソッドに渡す.

g.each {|px| ... }
g.each_pixel {|px| ... }
gのピクセルに関するイテレータ.ブロックを与えて起動する. 各ピクセルをブロックパラメタとして, ブロックの処理を繰り返す.

g.each_with_location {|px,i,j| ... }
g.each_pixel_with_location {|px,i,j| ... }
gのピクセルに関するイテレータ.ブロックを与えて起動する. 各ピクセルとその位置をブロックパラメタとして, ブロックの処理を繰り返す.

g.set_each! {|px| ... }
g.set_each_pixel! {|px| ... }
gのピクセルに関するイテレータ.ブロックを与えて起動する. 各ピクセルをブロックパラメタとしてブロックの処理を行い, ブロックの最後の式の値で,ピクセルを置き換える.

ピクセルに関するメソッド

px.r
px[0]
ピクセルのR成分を取りだす.

px.g
px[1]
ピクセルのG成分を取りだす.

px.b
px[2]
ピクセルのB成分を取りだす.

px.r = r
px[0] = r
ピクセルのR成分をrに設定する.

px.g = g
px[1] = g
ピクセルのG成分をgに設定する.

px.b = b
px[2] = b
ピクセルのB成分をbに設定する.

px.i
px[0]
ピクセルの輝度値を取りだす(グレイスケールのピクセル).

px.i = i
px[0] = i
ピクセルの輝度値をiに設定する(グレイスケールのピクセル).

px.each_component
ピクセルpxの成分に関するイテレータ.ブロックを与えて起動する. 各成分に関して,ブロックの処理を繰り返す.

px.set_each_component!
ピクセルpxの成分に関するイテレータ. ブロックを与えて起動する. 各成分に関して,ブロックの処理を行い,ブロックの最後の式の値で, 成分の値を置き換える.

多角形に関するメソッド

Gfcクラスには内部クラスとして,多角形クラスPolygonが用意されています. 内部クラスは,その名の通り,クラスの内部で定義されるクラスです. 内部クラスPolygonを拡張するには,次のようにします.


  class Gfc
    class Polygon
      # 多角形クラスに追加する定義をここに記述する.
        :
    end
  end

以下では,pを多角形オブジェクトとします. なお多角形クラスは,実習の都合上,あまり充実していません.

p = Gfc::Polygon.new([[x0,y0],[x1,y1],...,[xn-1,yn-1]],form)
(x0,y0),(x1,y1),...,(xn-1,yn-1)を頂点とする多角形オブジェクトを新たに生成する. 頂点は,配列で表現する. newメソッドには,頂点の配列(つまり配列の配列)を引数として与える.
なお,線分(2頂点の多角形),点(1頂点の多角形)も扱うことができる. また,第2引数で特殊な多角形の形式を指定できる. 通常の単純な多角形を生成する場合は第2引数は指定しなくてもよい.

形式指定する引数
単純な多角形(指定なしの場合と同じ)Gfc::Polygon::POLYGON_SIMPLE
自己交差のある多角形Gfc::Polygon::POLYGON_SELF_INTERSECTED
折れ線図形Gfc::Polygon::POLYGON_POLYLINE


p.vertices
p.v
多角形オブジェクトpの頂点の配列を返す. newメソッドで説明したように頂点は,配列で表現される. verticesメソッドは,配列の配列を返す.

p.number_of_vertices
p.nov
p.n
多角形オブジェクトpの頂点数を返す.

p.draw(g)
多角形オブジェクトpをGfcオブジェクトgの画像に描画する. 通常,このメソッドは直接起動されるのではなく, Gfcオブジェクトのdraw_figureメソッドを経由して起動されることが期待されている.
このメソッドは, Gfcオブジェクトにdraw_lineメソッドが定義されていないと動作しません. draw_lineメソッドはgfcライブラリには含まれていません. draw_lineメソッドはレポート課題で作成されることが期待されています.

p.center
多角形オブジェクトpの頂点の重心の座標を返す.

p.scale(sx,sy)
多角形オブジェクトpを原点中心にx方向にsx倍,y方向にsy倍拡大縮小する.

p.translate(tx,ty)
多角形オブジェクトpをx方向にtx,y方向にty平行移動する.

p.rotate(theta)
多角形オブジェクトpを原点中心にtheta(ラジアン)回転する.

p.affine(a,b,c,d,e,f)
多角形オブジェクトpに次のアフィン変換を適用する.
  x' = ax+by+c
  y' = dx+ey+f


p.undo
p.undo(n)
多角形オブジェクトpに対して適用された一番最近の変換を取り消して, 一つ前の状態に戻す. 引数nを指定した場合は,n回undoを適用する(n回分前の状態に戻す). 変換が一切行われていない場合は何も行わない.

p.restore
多角形オブジェクトpに対して適用された変換を全て取り消して, 最初の状態に戻す.

p.transform(m)
多角形オブジェクトpにmで表される変換を適用する. mは同次座標での変換を表す3x3の行列オブジェクト.

p.current_matrix
多角形オブジェクトpに対して現在適用されている変換行列を取りだして返す. 返り値は同次座標での変換を表す3×3の行列オブジェクト.
p.load_matrix(m)
多角形オブジェクトpに対して変換行列mを適用する. mは同次座標での変換を表す3×3の行列オブジェクト. それまでにpに適用されている変換Tを無視してmを新たな変換行列とする. undoすると,pは変換Tが適用されている状態に戻る.
[CG実習 >  Rubyによるプログラミングの基礎 >  画像の取り扱い >  Gfcリファレンスマニュアル]