チュートリアル - 最後にレンダリングされたイメージを Windows のクリップボードにコピーする
このチュートリアルは、System.Windows.Forms.Clipboard DotNetClass を使用して Windows クリップボードに対してビットマップの読み出しや書き込みを行う方法を示します。
このスクリプトをスタートアップ フォルダのいずれかに保存しておくと、起動時に評価されます。このカスタム関数は、レンダラーが終了するたびに PostRender コールバックによって実行され、最後にレンダリングされたイメージが
Windows クリップボードに入れられます。
関連トピック:
MAXScript における DotNet
dotNetClass
dotNetClass:System.Windows.Forms.Clipboard
全体の流れ:
|
レンダリングの後に一般的なコールバックによって毎回呼び出されるグローバル関数を定義します。
|
Windows クリップボード機能を公開する DotNet クラスを取得します。
|
MAXScript により、最後にレンダリングされたイメージを取得します。
|
イメージをディスクに保存します。
|
イメージを DotNet イメージに変換します。
|
イメージを Windows クリップボードに入れます。
|
イメージに関連するメモリをすべて解放し、ディスクからファイルを削除します。
|
クリップボードにイメージが含まれる場合は、true を返します。
|
同じ ID を持つコールバックの登録を解除します。
|
この関数を呼び出すカスタム ID を持つ PostRender コールバックを登録します。
|
スクリプト:
|
fn CopyRenderToClipboard =
(
clipboardClass = dotNetClass "System.Windows.Forms.Clipboard"
b = getLastRenderedImage()
theFileName = GetDir #image +"\\_renderToClipboard.bmp"
b.filename = theFileName
save b
close b
theImage = dotNetClass "System.Drawing.Image"
theBitmap = theImage.FromFile theFileName
clipboardClass.setImage theBitmap
theBitmap.Dispose()
deleteFile theFileName
clipboardClass.ContainsImage()
)--end fn
callbacks.removeScripts id:#CopyRenderToClipboard
callbacks.addScript #PostRender "CopyRenderToClipboard()" id:#CopyRenderToClipboard
|
ステップごとの解説
fn CopyRenderToClipboard = (
グローバル関数を定義します。グローバル スコープでこの関数を使用可能にするため、このスクリプトをスタートアップ フォルダに置きます。
clipboardClass = dotNetClass "System.Windows.Forms.Clipboard"
System.Windows.Forms から Clipboard dotNetClass を取得します。
b = getLastRenderedImage()
最後にレンダリングしたイメージを取得します。
theFileName = GetDir #image + "\\_renderToClipboard.bmp"
一時ファイル名を定義します。
ビットマップのファイル名を、前の手順で定義した名前に設定します。
ビットマップを、割り当てられたファイル名でディスクに保存します。
ビットマップを閉じます。
theImage = dotNetClass "System.Drawing.Image"
System.Drawing から Image dotNetClass を取得します。
theBitmap = theImage.FromFile theFileName
保存したイメージをファイルからビットマップとして取得します。
clipboardClass.setImage theBitmap
クリップボード クラスによって公開されている setImage メソッドを呼び出して、イメージをクリップボードにコピーします。
ビットマップを解放します。 - このビットマップはすでに Windows クリップボードに存在します。
ディスクから一時ファイルを削除します。
clipboardClass.ContainsImage()
Windows クリップボードにイメージが格納されている場合は true を返し、自身のイメージであると仮定できます。
グローバル関数の末尾です。
次は、レンダラーが終了するたびに関数を呼び出す、一般的なコールバックを登録します。
callbacks.removeScripts id:#CopyRenderToClipboard
まず、これから登録しようとしているコールバックと同じ ID を持つコールバックをすべて削除します。これにより、スクリプトを複数回実行できます (たとえば、関数の開発をさらに進めたり、コード全般に変更を加えたりする間)。
callbacks.addScript #PostRender "CopyRenderToClipboard()" id:#CopyRenderToClipboard
次に、レンダラーが終了するたびに関数を実行する PostRender コールバックを登録します。