チュートリアル - 最後にレンダリングされたイメージを Windows のクリップボードにコピーする

チュートリアル > DotNet の使用 > 最後にレンダリングされたイメージを 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"

一時ファイル名を定義します。

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 コールバックを登録します。

関連事項