prevcontentnext

Gimp::Pixel マニュアルページ



名称

Gimp::Pixel - 生のピクセルの操作法

***警告*** このマニュアルページは最新ではない。 生のピクセルを操作する簡単なプラグインについては、 examples/map_to_gradient を見よ。


概要

  use Gimp;
  use PDL;              # ピクセルに意味のあることをする

  # Gimp::GDrawable     - GDrawable 構造体
  # Gimp::Tile          - Tile 関数ファミリー
  # Gimp::PixelRgn      - PixelRgn 関数ファミリー


説明

ドローワブルのピクセルには、タイルまたはピクセル領域によって アクセスすることができる。 このマニュアルページでは、perl でこれをする方法を説明する。 全クラス(Gimp::GDrawable, Gimp::Tile, Gimp::PixelRgn) が、接頭辞 Gimp:: を付けても付けなくても使用できる。


GDRAWABLE

ドローワブル(PARAM_DRAWABLE や Gimp::Drawable としても知られる)をご存知かな? Gimp では、ドローワブルとはそこに描画できるもの:レイヤー、チャンネルあるいは 全ての画像のことだ。 gimp_drawable_何々 と名付けられた大概の関数は drawable_ID に作用するが、 別に GDrawable を要求する関数 (生のピクセルデータに作用するものが顕著)もある。 全てのドローワブルには対応する GDrawable があり、gimp_drawable_get 関数で取得できる。

 my $gdrawable = $drawable->get;

$gdrawable が破棄されると、それは自動的にフラッシュされ取り外されるので、 それを自分で行う必要はない。


TILE

タイルは全てのドローワブルの基本的な構成要素だ。 どのドローワブルもタイルの``格子''から成っており、 どのタイルも同じ大きさを持つ。 タイルの大きさは常に同じだ (Gimp プログラムにガチガチにコーディングされている)。

関数 gimp_tile_widthgimp_tile_height はタイルの現在の幅と高さを返す(現在、それは 64x64 だ)。

タイルを取得するには? まず、GDrawable 構造体を入手しなければならない。 それは、どのドローワブルからでも get 関数の呼出すことで 取得できる:

 my $gdrawable = $drawable->get;

ある意味で、<$gdrawable> は全てのタイルを含んでいる。 タイルに加えた変更は、この変数を破棄するまで 画像に反映されるとは限らない。 (そのために上記の例では``my''を使った。 $gdrawable がスコープの外に出ると、gimp のドローワブルは自動的に更新される。)

タイルにアクセスするには、 get_tile または get_tile2 を呼出さなければならない。 get_tile はタイルの行/列番号を期待するが、 get_tile2 はピクセルの座標を期待し、そのピクセルを内部に持つタイルを返す:

 my $tile = $gdrawable->get_tile2(1,75,60);

data メソッドは生のピクセルデータを返し、設定する。

 $piddle = $tile->data; # タイルのデータを piddle として取得する
 $piddle *= 0.5;        # ピクセルに何かし
 $tile->data($piddle);  # タイルを変更する


PIXELREGION

PixelRgn はドローワブルの長方形部分だ。 この領域内の、1個、1行、1列、長方形内のピクセルにアクセスできる。 今、全てを説明することを期待しないでほしい。 自分でもこのメカニズムがすごくよく分っている訳ではないのだ。

ピクセルの領域を生成するにはどうしたらよいか? まず、GDrawable 構造体を一つ手に入れる。 どんなドローワブルからも get 関数を呼出すことで取得できる:

 my $gdrawable = $drawable->get;

これで GDrawable から好きな数だけ PixelRgn 構造体を 生成できる。

 my $region = new PixelRgn($gdrawable,0,0,50,30,1,0);   # "new" を使う
 my $region = $gdrawable->pixel_rgn(0,0,50,30,1,0);     # またはドローワブルから

どちらのメソッドを使うかは、単にスタイルの問題に過ぎない...

以下の関数は、パックされたピクセルデータを返す (画像データを操作するもっと簡単な方法については Gimp::PDL マニュアルページ を見よ):

 $piddle = $region->get_pixel(45,60);           # (45|60)のピクセルを返す
 $piddle = $region->get_row(45,60,10);          # 水平方向のピクセルを返す
 $piddle = $region->get_col(45,60,10);          # 垂直方向に同じことをする
 $piddle = $region->get_rect(45,60,10,12);      # 10x12 の長方形

ピクセルを変更するには、領域の汚れビットを立てなければならず (と私は信じているのだが、領域の汚れビットの存在理由を理解しているわけ ではないので、間違っているかもしれない)、 その上で、以下の関数(それぞれが get-関数に対応している)で、 領域にピクセルデータを書き込むことができる:

 $region->set_pixel($piddle,45,60);             # (45|60)にピクセルを設定する
 $region->set_row($piddle,45,60);               # 1行に設定する
 $region->set_col($piddle,45,60);               # 1列に設定する
 $region->set_rect($piddle,45,60);              # 長方形全体に設定する

(それらが呼出す C の関数とは異なり、)大きさに関する引数(幅 および/または 高さ) が欠けていることに注意してほしい。 それらは piddle から算出することができるのだ。


作者

Marc Lehmann <pcg@goof.com>


こちらも参照

perl(1), Gimp(1).

prevcontentnext