Согласно MSDN, Create()
требует строковый параметр с пути или имени файла для MDI или TIF-документ, который означает, что он не будет принимать System.Drawing.Image
-объект вы получаете от GetImage()
. В качестве обходного пути вы можете сохранить изображение, хранящееся в буфере обмена, в временном файле и попытаться загрузить его. Ex.
#Get image from clipboard
Add-Type -AssemblyName System.Windows.Forms
$i = [System.Windows.Forms.Clipboard]::GetImage()
#Save image to a temp. file
$filepath = [System.IO.Path]::GetTempFileName()
$i.Save($filepath)
#Create MODI.Document from filepath
$MODIObj = New-Object -ComObject MODI.Document
$MODIObj.Create($filepath)
Если Create()
жалуется на имя файла (отсутствует расширение), то просто добавьте его к темп-FilePath:.
$filepath = [System.IO.Path]::GetTempFileName() + ".tif"
Вы также можете нажать скопировать на файл (бывший Ctrl + C в файл Explorer) и получить этот путь. Пример:
#Get image from clipboard
Add-Type -AssemblyName System.Windows.Forms
#If clipboard contains image-object
if([System.Windows.Forms.Clipboard]::ContainsImage()) {
#Get image from clipboard
$i = [System.Windows.Forms.Clipboard]::GetImage()
#Save image to a temp. file
$filepath = [System.IO.Path]::GetTempFileName()
$i.Save($filepath)
} elseif ([System.Windows.Forms.Clipboard]::ContainsFileDropList()) {
#If a file (or files) are stored in the clipboard (you have pressed ctrl+c/ctrl+x on file/files)
$files = [System.Windows.Forms.Clipboard]::GetFileDropList()
#Only using first filepath for this demo.
#If you need to support more files, use a foreach-loop to ex. create multiple MODI.documents or process one at a time
$filepath = $files[0]
}
#If filepath is defined
if($filepath) {
#Create MODI.Document from filepath
$MODIObj = New-Object -ComObject MODI.Document
$MODIObj.Create($filepath)
}
Вы сначала загрузили сборку winforms? ('Add-Type -Assembly System.Windows.Forms') –