« 前々回のC4Dスクリプトのプラグイン化 | トップページ | スクリプトで読み込んだ画像に手を加えて保存する »

Cinema 4Dスクリプトで画像ファイルを読み込む

さて、今回はC4Dスクリプトで画像ファイルを読み込む実験。
前回の「C4Dスクリプトのプラグイン化」でアイコンを読み込む為に使いました。
ファイルを読み込むためには、「ファイルパス(ファイル名)」と「ファイルを読み込む為の機能」が必要です。まずは、ファイルパスから。

COFFEEでファイルパスを扱うためにはFilenameクラスを使います。
ファイルを指定するにはファイルオープンダイアログが使えれば便利だよね。

/*
ファイルオープンダイアログ

08.05.30
*/


var path = new(Filename);//パスの為の変数
var res;

res = path->FileSelect("オープンダイアログのテスト" , FALSE);//ファイルパスをpathに格納
if(!res)return;//ファイルパスの取得に失敗したり、キャンセルボタンが押されたら処理を終了

println("path : " , path->GetFullString());//pathに格納されたフルパスをコンソールに表示

このスクリプトはファイルオープンダイアログを開いてファイルが選択されたら、フルパスをコンソールに表示します。
オープンダイアログを開くFileSelect()メンバ関数は、読み込みの為のダイアログだけでなく保存の為のダイアログも兼ねています。第2引数のFALSEをTRUEに換えるとファイル保存ダイアログになります。この引数は「セーブダイアログか否か」のパラメータです。

path->FileSelect("保存ダイアログのテスト" , TRUE);

変更してテストしてみてください。保存ダイアログが開かれます。第1引数はダイアログに表示されるメッセージです。
あとは、勘違いしがちなのがダイアログはあくまでもファイルパスを取得する為のもので、ファイルを読み込んだり書き込んだりするものではないんだよね。だから保存ダイアログでファイルを選択して「上書きしますか?」って聞かれてOKしても、いきなりファイルが上書きされるわけではありません。WinXPでは大丈夫。OS Xではどうかは、わからないけど。

このFileSelect()、ツールを使うユーザにファイルを選択させるダイアログでの取得のほか、ツールを作る側で指定する為のパスの取得する為の関数があります。

GeGetStartupPath()  C4Dがインストールされているフォルダパスの取得
GeGetRootFilename()  プラグイン本体のファイルパスの取得

この2つのBaseFunction関数はプラグインで使われます。プラグインと同じフォルダに在るアイコンやデータファイル等にアクセスするためのものなので、スクリプトではあまり使われないかもしれません。

オープンダイアログ等で取得したファイルパスは、そのままファイルを指定できますが、もしファイルパスを操作しなければならない時は、Filenameクラスのメンバ関数を使います。

AddLast(ファイル名又はフォルダ名)  パスの最後にファイル名やフォルダ名を追加します。
RemoveLast()  パスの最後のファイル名(拡張子を含む)やフォルダ名を削除します。
SetSuffix()  パスの最後に拡張子を付けます。
DelSuffix()  パスの最後の拡張子を削除します。
CheckSufix(拡張子)  パスの最後の拡張子をチェックします。
GetLastString()  パスの最後のファイル名やフォルダ名を取得します。
SetLastString(ファイル名又はフォルダ名)  パスの最後のファイル名やフォルダ名を変更する。
GetClone()  Filenameクラスを複製する。
CopyTo(複製元のFilenameクラス)  複製元のクラスを複製する。

この他にパスの比較があります。

では、画像を読み込んで、画像表示ウィンドウに表示してみます。

/*
画像ファイルを読み込んで画像表示ウィンドウに表示

08.05.30
*/

var image = new(BaseBitmap , 1 , 1);//最小のビットマップで宣言と初期化。
var path = new(Filename);//ファイルパスの宣言。
var res = path->FileSelect("画像ファイルを選んでね" , FALSE);//オープンダイアログ。
if(!res)return;//パスがNGならば処理を中断。

res = image->Load(path);//実際に画像ファイルを読み込む。
if(!res)return;//画像ファイルの読み込みに失敗したら処理を終了。

ShowBitmap(image);//読み込んだ画像を表示する。

読み込む為のBaseBitmapクラスを最小(1×1)のサイズで初期化します。最小と言っても(0×0)ではありません。もし(0×0)だとimageはnilになってしまいます。そうなると画像ファイルを読み込むimage->Load(path);でエラーになります。Load()メンバ関数は引数でFilenameクラスを渡すと、そのFilenameクラスが示す画像ファイルを読み込みます。これは便利な関数で、ファイルタイプを指定する必要がありません。C4Dが読み込める画像ファイル(JPGでもPSDでもBMP、TIFF)を読み込みます。
最後のShowBitmap()関数はBaseFunction関数で画像を画像表示ウィンドウに表示します。今この関数は画像であるBaseBitmapを渡してそれを表示していますが、画像ファイルを表示するだけでしたらファイル(Filename)を直接指定して表示できます。

/*
画像ファイルを直接画像表示ウィンドウに表示します。

08.05.30
*/


var path = new(Filename);//ファイルパスの宣言。
var res = path->FileSelect("画像ファイルを選んでね" , FALSE);//オープンダイアログ。
if(!res)return;//パスがNGならば処理を中断。

ShowBitmap(path);//画像ファイルを表示する。

この二つのスクリプトで意地悪をしてテキストファイルを指定しても何も起こりません。
今回も活動限界時間が近づいてきたので畳み込んでしまいました。
次回も関連事項です。
更に続く…

|

« 前々回のC4Dスクリプトのプラグイン化 | トップページ | スクリプトで読み込んだ画像に手を加えて保存する »

コメント

この記事へのコメントは終了しました。