Image Generator ver 1.08



上の図のような、画面の座標に応じた色をスクリプトで作りたい時のためのツールです。

パパッと格子画像を作りたいとき、幾何学模様を作りたいとき、UV座標情報を色として表示するためのテクスチャが欲しい時、数式で表したディストーションをかけたいとき、などなどマニアックな局面で役に立つ場合があります。

Release Note

2014/05/28 ver 1.00 公開
2014/06/04 ver 1.02 公開 マルチスレッド化、リボンUI、スクロールバー
2014/07/10 ver 1.04 公開 検索窓の追加。バグフィックス。
2014/09/21 ver 1.06 公開 シリアル処理、連続処理、キャスト用のコマンド追加。
2015/07/21 ver 1.08 公開 画像、テーブルの読み込み。

Download

ImageGeneratorWin100.zip
ImageGeneratorWin102.zip
ImageGeneratorWin104.zip
ImageGeneratorWin106.zip
ImageGeneratorWin108.zip

Manulal



スクリプトを入力して、リフレッシュボタンを押すと、画像の各ピクセルにおいてスクリプトが実行されて、その結果に応じた画像が表示されます。

入力としては7つの変数が予め用意されていています。

x,yピクセルの座標
nx,ny0-1の間に規格化されたピクセルの座標
width, height画像のサイズ
seqIndex連続処理用のインデックス(後述)

戻り値として、return r,g,b のようにカンマで区切って赤緑青の色情報を返すようにします。

スクリプト言語として、Luaを利用しています。Luaの文法規則などについては以下のページなどを参考にしてください。

日本語リファレンスマニュアル (全てが書いてありますが、膨大なので入門には向きません…)

Lua入門講座

Luaプログラミング入門

シリアル処理

スクリプト中にキーワード SERIAL を含む場合には、
各ピクセルごとにスクリプト処理をするのではなく
一度だけ処理を行って、配列で色情報を返すように処理を変更します。
(キーワード SERIAL はコメント欄に記述してください)

このモードは、テキスト(またはバイナリ)データを読んで画像を作成するいった、
「各ピクセルごとの処理」になじまない処理を行うために追加されたものです。

戻り値 r,g,b は、[height][width]の大きさの配列として予め宣言されています。

バイナリデータの変換

Luaには、4バイトのデータを読んだときに、「それをfloatとして解釈する」といった処理(キャスト)がないそうです。
そのためにCのキャスト処理を呼び出す関数を ImageGenerater 内で登録して Lua を拡張しています。

C.BytesToFloatLE(byte1, byte2, byte3, byte4) のように 4 byte のデータを引数に呼び出すことで、floatの値を得ることができます。
末尾の LE, BE は リトルエンディアン、ビッグエンディアンを表します。

C.BytesToIntLEC.ByteToIntBE4byte 整数への変換
C.BytesToShortLEC.ByteToShortBE2byte 整数への変換
C.BytesToFloatLEC.ByteToFloatBE4byte 浮動小数への変換
C.BytesToDoubleLEC.ByteToDoubleBE8byte 浮動小数への変換

引数はバイトの数だけ与えるようにしてください。

連続処理



少しずつ違ったパラメータを使って作図して、連番画像からアニメーションを作るといった用途に使えるようになりました。

Sequenceのアイコンを On にすると、連番の範囲と現在のインデックス(current)、出力ファイル先の編集用画面が開きます。
Lua スクリプト内では、変数 seqIndex にインデックスが与えられるので、変数の変更や、読み込むファイル名の変更といった処理に使用します。

隣の連続保存ボタンを押すと、一連のパラメータ違いの画像を連番画像として保存を開始します。

※)currentの数値を変更しても、自動的に画像の更新はされません。リフレッシュボタンを押してください。
この挙動は、作成に時間のかかる画像などで操作性を落とさないためです。

外部ファイルの読み込み

画像と数表のファイルの読み込みが行えます。Luaのみでも読み込みのスクリプトを作れば処理できるはずなのですが、そうもいかないので、Image Generator の機能として画像などの読み込みを行い、スクリプト内からその情報を呼び出すという仕組みにしてあります。

画像の読み込み



基本画像のアイコンをクリックすると、基本画像の読み込み用のパネルが表示されます。
画像は0と1の2種類の読み込みまで行えます。

Lua 内からは、C.GetRGB() または GetRGBNormal() でr,g,bの色を呼び出すことができます。

r,g,b = C.GetRGB (index, x, y, wrap = 0)x,y は ピクセル座標で指定します。
r,g,b = C.GetRGBNormal (index, nx, ny, wrap = 0)nx, ny は 0〜1 までの値で指定します

使い方の例としては、サンプルの Distortion.txt を参考にしてください。

index画像の番号 (0 または 1) を指定します。
wrap1の時は、繰り返しパターンとして読み込みます。デフォルトは0です。

数表の読み込み



同様に、数表アイコンをクリックすると、数表読み込み用のパネルが表示されます。

Lua 内からは、C.GetTableValue() で呼び出せます。

value = C.GetTableValue (arg)引数 arg をキーとして、テーブルを参照して値を返します。

数表ファイルのフォーマットは、2つのペアになった数値(キーと値)を羅列したテキストファイルのみ扱えます。
キーの数値はソート済みである必要があります。
arg で与えられた値がキーの値ピッタリになっていない場合は、線形補間された値を返します。
1 10
2 5
3 0.333333
4 0.25
5 0.2
例えば、上の例で引数として C.GetTableValue(4.5) で呼び出すと、0.225 を返します。

Samples

いくつかのスクリプトのサンプルが Sample フォルダ内に入っています。





基本画像をゆがませて表示します。







Lua上のファイルI/Oのサンプルとして連番の.bmpファイルを読み込みます。

サンプルとして短いアニメーション用の連番.bmp(256x256pixels)を同封してあります。
.bmpは54バイトのヘッダの後に画像データが単純に並んでいるので、Luaでも簡単に読むことができます。

inserted by FC2 system