The following tutorial demonstrates the use of the System.Windows.Forms.Clipboard DotNetClass to read and write bitmaps from and to the Windows Clipboard.
The script can be saved into one of the Startup folders to be evaluated on startup. The custom function will be executed by a PostRender callback each time the renderer finishes, putting the last rendered image into the Windows Clipboard automatically.
Related topics:
dotNetClass:System.Windows.Forms.Clipboard
NATURAL LANGUAGE
Define a global function to be called by a general callback after each rendering.
Get the DotNet class exposing Windows Clipboard functionality
Get the last rendered image via MAXScript
Save the image to disk
Convert the image to a DotNet Image
Put the image into the Windows Clipboard
Release any memory related to the image and delete the file from disk
Returns true if the clipboard now contains an image
Unregister any callbacks with the same ID
Register a PostRender callback with a custom ID that calls the function
SCRIPT:
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 = (
Define a global function. We will place the script in a startup folder, so we want the function to be visible in the global scope.
clipboardClass = dotNetClass "System.Windows.Forms.Clipboard"
Get the Clipboard dotNetClass from System.Windows.Forms
b = getLastRenderedImage()
Get the last rendered image
theFileName = GetDir #image + "\\_renderToClipboard.bmp"
Define a temporary file name.
b.filename = theFileName
Set the bitmap's file name to the one defined in the previous step.
save b
Save the bitmap to disk under the assigned file name.
close b
Close the bitmap.
theImage = dotNetClass "System.Drawing.Image"
Get the Image dotNetClass from System.Drawing
theBitmap = theImage.FromFile theFileName
Get the saved image from file as bitmap
clipboardClass.setImage theBitmap
Copy the image to the clipboard by calling the setImage
method exposed by the clipboard class.
theBitmap.Dispose()
Release the bitmap - it is already in the Windows Clipboard!
deleteFile theFileName
Delete the temporary file from disk.
clipboardClass.ContainsImage()
Return true if the Windows Clipboard contains an image, which we can assume is our image.
)--end fn
This is the end of the global function.
Now we will register a general callback to call the function whenever the renderer finishes.
callbacks.removeScripts id:#CopyRenderToClipboard
First we make sure we remove any callbacks with the same ID as the one we are about to register. This way, you can run the script multiple times (for example while further developing the function or making changes to the code in general).
callbacks.addScript #PostRender "CopyRenderToClipboard()" id:#CopyRenderToClipboard
Then we register a PostRender callback to run the function whenever the renderer finishes.