dothikoのカクカクワールド2D REBOOT

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか色々。

gimpのpaletteについてのpython-fu(というかpdb)メモ

COLOR構造体の生成について

gimpcolorはimportする必要があるようです。また、各色の要素は整数なら0〜255、浮動小数点数なら0〜1.0という感じらしく、内部では浮動小数点数で保持しています。そして、アルファ値は勝手に1.0にしてくれます。

import gimpcolor

col=gimpcolor.RGB(255,0,0) # 赤

paletteについて

  • paletteの各エントリはアクティブでなくても編集・取得可能。ありがたい。
  • pdb.gimp_palette_new(name)でパレット自体を新規作成
  • パレットの存在を調べるにはpdb.gimp_palettes_get_list(regexp)で正規表現で検索できる。返り値は (count, (palette-name1,palette-name2....))というようなタプルのタプル
  • パレットから色を得るにはpdb.gimp_palette_entry_get_color(name,idx) 何故かこのプロシージャだけ命名規則が微妙に違う感じなので戸惑いました
  • pdb.gimp_palette_add_entry(name,color) でエントリを追加
  • pdb.gimp_palette_set_entry(name,idx,color) でエントリを編集、もしidxが0〜エントリの総数-1を超えていた場合はRuntimeError例外
  • pdb.gimp_palette_delete_entry(name,idx) でエントリを削除
  • パレットは自動的に保存されているので、何かする必要はない
  • 実際のところadd_entry/set_entryするだけで更新されるのだけど、pdb.gimp_palettes_refresh()はいつ必要になるのかいまいちわからない。

何の為に?

python-fuでワンキーで前景色に背景色を混ぜるプラグインを作りましたが、python-fuからはgimp本体のカラーヒストリへのアクセス方法が無い(と思う)ため「色を戻す」のにテンポラリファイルに吐いたテキストを使用していました。

ふと思いついたのがパレットの利用。アクティブでないパレットにアクセスできるのならばここにエントリを溜めて行けばいいだろうと…ビジュアルにアクセス出来ますし。

さて、重い腰を上げて…改造するか〜!