title: Picture
author: YOSHIDA Kazuhiro
mailto: moriq@moriq.com

1. Phi::Picture

Phi::Picture は，ビットマップ・アイコン・メタグラフィック・ユーザー定義グラフィックを保持する。

%c:Phi::Picture% は，グラフィックを保持するために使う Phi::Graphic# コンテナで， #graphic にその種類が指定される。これは，グラフィックが Phi::Graphic# クラスのものである可能性がある場合に Phi::Graphic# のかわりに使う。 #load , #save は，そのクラスに応じたファイルの読み込みおよび書き込みを行う。 #load , #save は， %c:Phi::Picture% がサポートするすべての形式のグラフィックを読み書きできるが，例えば， Phi::Icon# クラスの場合は %c:.ico% ファイルの読み書きのみできる。

Phi::Picture# がビットマップグラフィックを保持しているときは， #bitmap がグラフィックを指定する。同様に， %c:Phi::Picture% が保持するものがアイコングラフィックでは #icon が， %c:Phi::Picture% が保持するものがメタファイルグラフィックでは #metafile が，それぞれグラフィックを指定する。

%c:Phi::Picture% のプロパティは，画像オブジェクトが保持するグラフィックの種類とそのサイズを示す。 %c:Phi::Picture% のメソッドは，グラフィックを読み込み・保存・操作するために使う。画像をクリップボードに読み込んだり保存したりするには， Phi::Clipboard#assign を使う。

画像をキャンバス上に描画するには， Phi::Canvas#draw または Phi::Canvas#stretch_draw を呼び出して， Phi::Picture#graphic を引数として渡す。

1.1. methods

: load(file_name or stream) : self
  画像を取得する。

  : file_name : String

  : stream : Stream

  作成される Phi::Graphic# クラスはファイル拡張子で指定される。ファイル拡張子が認識されない場合は例外を生成する。

: save(file_name or stream) : nil
  画像を保存する。

  : file_name : String

  : stream : Stream

: assign(source) : nil
  %c:assign% は，オブジェクトの内容を別のオブジェクトにコピーすることでオブジェクト間のコピーを行う。

  %v:source% が #graphic にとって有効なオブジェクトの種類であるときは，それを #graphic の値にする。

  %c:assign% は， #graphic と %v:source% の実際の種類に依存する。例えば #graphic と %v:source% が Phi::Bitmap# の場合， %v:source% の保持するビットマップが #graphic にコピーされる。 Phi::Icon# や Phi::Metafile# では，同様の変換が有効である。

  %v:source% が #graphic にとって有効なオブジェクトではない場合，継承メソッドを呼び出して画像をそれと矛盾のないオブジェクトからコピーできるようにする。

1.1. properties

: bitmap : Bitmap
  画像オブジェクトの内容をビットマップグラフィック ( %c:.bmp% ) として指定する。

  %c:bitmap% は，画像オブジェクトがビットマップを保持しているときにそれを参照できる。画像が Phi::Metafile# または Phi::Icon# グラフィックを保持しているときに %c:bitmap% を参照すると，そのグラフィックは変換されない。かわりに，画像の元の内容が破棄され，新しい空白ビットマップを返す。
