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