ここでは,実習で用いる画像ライブラリGfcの機能一覧を紹介します. 以下,gはGfcオブジェクトを表します. またpxはピクセルオブジェクトを表します. メソッドの引数で青字で示してあるものは,オプションであることを示します. オプションは,必要に応じて追加する(省略可能な)引数です.
もくじ
Gfcのクラスメソッド
- g = Gfc.new(width,height,pixel_format)
- g = Gfc.new("filename")
- g = Gfc.new(stream)
- g = Gfc.new("filename")
-
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形式で保存される.
指定できる画像フォーマットは次の通り.
フォーマット 指定する引数 PNG Gfc::FORMAT_PNG GIF Gfc::FORMAT_GIF JPEG Gfc::FORMAT_JPG PPM,PGM Gfc::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.nov
-
多角形オブジェクト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が適用されている状態に戻る.