Hこんにちは、娯楽目的でSchemeを学びたいのでない限り、GIMPスクリプトを書くためにSchemeの代わりにPythonを使うことを強くお勧めします。
Python の信条の 1 つは、言語があなたとあなたの問題の間にとどまることを許さないことであり、独自の Matrix 操作コードを書くことは簡単です。高性能な操作が必要な場合は、NumPy などのサードパーティ ライブラリを使用して (GIMP 環境内からでも) 取得できます。
したがって、スカラー乗算と加算を許可する Matrix クラスの場合、単純に次のように記述できます。
class Matrix(object):
def __init__(self, rows, cols, *args):
self.rows = rows
self.cols = cols
self.values = args
def __getitem__(self, (i,j)):
return self.values[i * self.cols + j]
def __setitem__(self,(i,j), value):
self.values[i * self.cols + j] = value
def __add__(self, other):
values = []
for i in range(self.rows):
for j in range(self.cols):
values.append(self[i,j] + other[i,j])
return Matrix(self.rows, self.cols, *values)
def __mul__(self, N):
return Matrix(self.rows, self.cols,*(N * v for v in self.values))
def __repr__(self):
return "\n".join (" ".join(str(self[i,j]) for j in range(self.cols)) for i in range(self.rows) )
Python のインタラクティブ コンソールでの例:
>>> m = Matrix(3,3,
... 3,3,3,
... 5,3,4,
... 4,4,4)
>>> m * 3
9 9 9
15 9 12
12 12 12
より多くの操作を実装することも同様に簡単で、GIMP の API 関数を呼び出すために、このサンプル クラスでは、m.values を使用できます。これは、すべての行列値を順番に並べた単純なリストです。これは、GIMP PDB の関数がそれらを使用する方法です。 . (pdb.gimp_drawable_transform_matrix や pdb.plug_in_convmatrix など。(ヘルプ メニューの下に GIMP の API ブラウザーが表示されていると思います。Scheme と Python で同じ関数を使用できます。名前の「-」を「_」に置き換えるだけです) )