# 2 `imageop` -- 生の画像データを操作する

`imageop`モジュールは画像に関する便利な演算がふくまれています。Python文字列に保存されている8または32ビットのピクセルから構成される画像を操作します。これは`gl.lrectwrite()`と`imgfile`モジュールが使用しているものと同じフォーマットです。

モジュールは次の変数と関数を定義しています:

exception `error`
  この例外はピクセル当りの未知のビット数などのすべてのエラーで発生させられます。

`crop`( | image, psize, width, height, x0, y0, x1, y1)

  imageの選択された部分を返します。imageはwidth×heightの大きさで、psizeバイトのピクセルから構成されなければなりません。x0、y0、x1およびy1は`gl.lrectread()`パラメータと同様です。すなわち、境界は新画像に含まれます。新しい境界は画像の内部である必要はありません。旧画像の外側になるピクセルは値をゼロに設定されます。x0がx1より大きければ、新画像は鏡像反転されます。y軸についても同じことが適用されます。

`scale`( | image, psize, width, height, newwidth, newheight)

  imageを大きさnewwidth×newheightに伸縮させて返します。補間は行われません。ばかばかしいほど単純なピクセルの複製と間引きを行い伸縮させます。そのため、コンピュータで作った画像やディザ処理された画像は伸縮した後見た目が良くありません。

`tovideo`( | image, psize, width, height)

  垂直ローパスフィルタ処理を画像全体に行います。それぞれの目標ピクセルを垂直に並んだ二つの元ピクセルから計算することで行います。このルーチンの主な用途としては、画像がインターレース走査のビデオ装置に表示された場合に極端なちらつきを抑えるために用います。そのため、この名前があります。

`grey2mono`( | image, width, height, threshold)

  全ピクセルを二値化することによって、深さ8ビットのグレースケール画像を深さ1ビットの画像へ変換します。処理後の画像は隙間なく詰め込まれ、おそらく`mono2grey()`の引数としてしか使い道がないでしょう。

`dither2mono`( | image, width, height)

  (ばかばかしいほど単純な)ディザ処理アルゴリズムを用いて、8ビットグレースケール画像を1ビットのモノクロ画像に変換します。

`mono2grey`( | image, width, height, p0, p1)

  1ビットモノクロが象画像を8ビットのグレースケールまたはカラー画像に変換します。入力で値ゼロの全てのピクセルは出力では値p0を取り、値0の入力ピクセルは出力では値p1を取ります。白黒のモノクロ画像をグレースケールへ変換するためには、値`0`と`255`をそれぞれ渡してください。

`grey2grey4`( | image, width, height)

  ディザ処理を行わずに、8ビットグレースケール画像を4ビットグレースケール画像へ変換します。

`grey2grey2`( | image, width, height)

  ディザ処理を行わずに、8ビットグレースケール画像を2ビットグレースケール画像に変換します。

`dither2grey2`( | image, width, height)

  ディザ処理を行い、8ビットグレースケール画像を2ビットグレースケール画像へ変換します。`dither2mono()`については、ディザ処理アルゴリズムは現在とても単純です。

`grey42grey`( | image, width, height)

  4ビットグレースケール画像を8ビットグレースケール画像へ変換します。

`grey22grey`( | image, width, height)

  2ビットグレースケール画像を8ビットグレースケール画像へ変換します。

`backward_compatible`
  0 にセットすると、このモジュールの関数は、リトルエンディアンのシステムで 以前のバージョンと互換性のない方法でマルチバイトピクセル値を表現 するようになります。このモジュールはもともと SGI 向けに書かれたの ですが、SGI はビッグエンディアンのシステムであり、この変数を設定しても 何の影響もありません。とはいえ、このコードはもともとどこでも動作 するように考えて作られたわけではないので、バイトオーダに関する 仮定が相互利用向けではありませんでした。 この変数を 0 にすると、リトルエンディアンのシステムではバイトオーダを 反転して、ビッグエンディアンと同じにします。