如何将 .dm3 文件(带有注释和比例尺)转换为 .jpg/jpeg 图像?
How to convert a .dm3 file (with annotation and scale bar) to .jpg/jpeg image?
我想知道如何将 dm3 文件转换为 .jpg/jpeg 图像?图像上有测试注释和比例尺。我设置了一个脚本,但它总是显示“格式不能包含要保存的数据”。这可以通过 file/batch 转换函数来完成。那么如何在脚本中实现同样的功能呢?谢谢
image test:=IntegerImage("test",2,1,100,100)
test.ShowImage()
image frontimage:=GetFrontImage()
string filename=getname(frontimage)
imagedisplay disp = frontImage.ImageGetImageDisplay(0)
disp.applydatabar()
ImageDocument frontDoc = GetFrontImageDocument()
string directoryname, pathname
number length
if(!SaveAsDialog("","Do Not Change Me",directoryname)) exit(0)
length=len(directoryname)-16
directoryname=mid(directoryname,0,length)
pathname=directoryname+filename
frontDoc.ImageDocumentSaveToFile( "JPG Format", pathname )
要转换为 jpg,您必须使用 "JPEG/JFIF Format"
作为 handler
(=格式)。
在ImageDocument.ImageDocumentSaveToFile()
函数中必须是这个字符串。帮助中提到了其他格式(F1 > 脚本 > 对象 > 文档对象模型 > ImageDocument 对象 > ImageDocumentSaveToFile()
函数)。这些是(例如):
- 'Gatan Format'
- 'Gatan 3 Format'
- 'GIF Format'
- 'BMP Format'
- 'JPEG/JFIF Format'
- 'Enhanced Metafile Format'
在您的代码中,您使用 SaveAsDialog()
获取目录。这是没有必要的。您可以使用 GetDirectoryDialog()
来获取目录。这为您节省了 directoryname
的名称操作,并避免了用户更改您的文件名时出现的问题。
另外,对于连接路径,我更喜欢使用 PathConcatenate()
。一方面,这使你的代码更具可读性,因为它的名字告诉了你在做什么。另一方面,这也会处理以 \
或不以 \
结尾的目录以及其他与路径相关的事情。
下面的代码是我认为你需要的:
Image test := IntegerImage("test", 2, 1, 100, 100);
test.ShowImage();
Image frontimage := GetFrontImage();
ImageDisplay disp = frontImage.ImageGetImageDisplay(0);
disp.applydatabar();
ImageDocument frontDoc = GetFrontImageDocument();
string directoryname;
if(!GetDirectoryDialog("Select directory", "C:\\", directoryname)){
// ↑
// You can of course use something else as the start point for selection here
exit(0);
}
string filename = GetName(frontimage);
string pathname = directoryname.PathConcatenate(filename);
frontDoc.ImageDocumentSaveToFile("JPEG/JFIF Format", pathname);
这个是正确的,应该接受。您的问题是错误的文件类型字符串。您要使用 "JPEG/JFIF 格式"
有关在 DigitalMicrograph 中保存图像文件的更多一般信息。
One 不会保存 images 但总是 imageDocuments 可以包含一个、多个甚至零个 image个对象在其中。像 SaveAsGatan()
这样保存 image 的脚本命令实际上只是调用这样的东西:ImageGetOrCreateImageDocument().ImageDocumentSaveToFile()
对于简单的文档中单图类型的图像,这种差异并不重要,但当文档中有多个图像或单个图像是同时显示多次(可以做到。)所以了解“真正”发生的事情总是好的。
ImageDocuments 包含一些与保存相关的属性:
- A 保存格式(“Gatan 格式”,“TIFF 格式”,...)
- 默认值:打开时使用的格式,或者创建时最后使用的保存格式
- 脚本命令:
ImageDocumentGetCurrentFileSaveFormat()
ImageDocumentSetCurrentFileSaveFormat()
- 当前文件路径:
- 默认值:打开的来源,或者为空
- 脚本命令:
ImageDocumentGetCurrentFile()
ImageDocumentSetCurrentFile()
- A 脏状态:
- 默认值:打开时干净,创建时脏
- 脚本命令:
ImageDocumentIsDirty()
ImageDocumentClean()
- 一个链接到文件的状态:
- 默认值:打开时为true,创建时为false
- 脚本命令:
ImageDocumentIsLinkedToFile()
有两种方法保存imageDocument:
正在将当前文档本身保存到光盘:
void ImageDocumentSave( ImageDocument imgDoc, Number save_style )
这利用 imageDocument 的当前属性将其保存到当前路径当前格式,在此过程中将其标记为干净。
save_style
参数确定程序如何处理丢失的信息:
- 0 = 从不询问路径
- 1 = 询问是否未链接(或空路径)
- 2 = 总是问
正在将当前文档的副本保存到光盘:
void ImageDocumentSaveToFile( ImageDocument imgDoc, String handler, String fileName )
这将以提供的格式复制并保存文件到提供的路径下。内存中的imageDocument并没有改变它的属性。最值得注意的是:它确实 not 变得干净,并且 not 链接到光盘上提供的文件。
filename
参数指定保存位置包括文件名。如果提供了 文件扩展名 ,它必须与文件格式匹配,但可以省略。
handler
参数指定了文件格式并且可以是 GMS 当前支持的任何内容,例如:
Gatan Format
Gatan 3 Format
GIF Format
BMP Format
JPEG/JFIF Format
Enhanced Metafile Format
简而言之:
要以不同的格式保存当前打开的 imageDocument,您需要执行以下操作:
imageDocument doc = GetFrontImageDocument()
doc.ImageDocumentSetCurrentFileSaveFormat("TIFF Format")
doc.ImageDocumentSave(0)
如果只是保存当前状态的副本,您可以使用:
imageDocument doc = GetFrontImageDocument()
string path = doc.ImageDocumentGetCurrentFile() // full path including extension!
path = PathExtractDirectory(path,0) + PathExtractBaseName(path,0) // path without file extension
doc.ImageDocumentSaveToFile("TIFF Format", path )
我想知道如何将 dm3 文件转换为 .jpg/jpeg 图像?图像上有测试注释和比例尺。我设置了一个脚本,但它总是显示“格式不能包含要保存的数据”。这可以通过 file/batch 转换函数来完成。那么如何在脚本中实现同样的功能呢?谢谢
image test:=IntegerImage("test",2,1,100,100)
test.ShowImage()
image frontimage:=GetFrontImage()
string filename=getname(frontimage)
imagedisplay disp = frontImage.ImageGetImageDisplay(0)
disp.applydatabar()
ImageDocument frontDoc = GetFrontImageDocument()
string directoryname, pathname
number length
if(!SaveAsDialog("","Do Not Change Me",directoryname)) exit(0)
length=len(directoryname)-16
directoryname=mid(directoryname,0,length)
pathname=directoryname+filename
frontDoc.ImageDocumentSaveToFile( "JPG Format", pathname )
要转换为 jpg,您必须使用 "JPEG/JFIF Format"
作为 handler
(=格式)。
在ImageDocument.ImageDocumentSaveToFile()
函数中必须是这个字符串。帮助中提到了其他格式(F1 > 脚本 > 对象 > 文档对象模型 > ImageDocument 对象 > ImageDocumentSaveToFile()
函数)。这些是(例如):
- 'Gatan Format'
- 'Gatan 3 Format'
- 'GIF Format'
- 'BMP Format'
- 'JPEG/JFIF Format'
- 'Enhanced Metafile Format'
在您的代码中,您使用 SaveAsDialog()
获取目录。这是没有必要的。您可以使用 GetDirectoryDialog()
来获取目录。这为您节省了 directoryname
的名称操作,并避免了用户更改您的文件名时出现的问题。
另外,对于连接路径,我更喜欢使用 PathConcatenate()
。一方面,这使你的代码更具可读性,因为它的名字告诉了你在做什么。另一方面,这也会处理以 \
或不以 \
结尾的目录以及其他与路径相关的事情。
下面的代码是我认为你需要的:
Image test := IntegerImage("test", 2, 1, 100, 100);
test.ShowImage();
Image frontimage := GetFrontImage();
ImageDisplay disp = frontImage.ImageGetImageDisplay(0);
disp.applydatabar();
ImageDocument frontDoc = GetFrontImageDocument();
string directoryname;
if(!GetDirectoryDialog("Select directory", "C:\\", directoryname)){
// ↑
// You can of course use something else as the start point for selection here
exit(0);
}
string filename = GetName(frontimage);
string pathname = directoryname.PathConcatenate(filename);
frontDoc.ImageDocumentSaveToFile("JPEG/JFIF Format", pathname);
这个
有关在 DigitalMicrograph 中保存图像文件的更多一般信息。
One 不会保存 images 但总是 imageDocuments 可以包含一个、多个甚至零个 image个对象在其中。像
SaveAsGatan()
这样保存 image 的脚本命令实际上只是调用这样的东西:ImageGetOrCreateImageDocument().ImageDocumentSaveToFile()
对于简单的文档中单图类型的图像,这种差异并不重要,但当文档中有多个图像或单个图像是同时显示多次(可以做到。)所以了解“真正”发生的事情总是好的。ImageDocuments 包含一些与保存相关的属性:
- A 保存格式(“Gatan 格式”,“TIFF 格式”,...)
- 默认值:打开时使用的格式,或者创建时最后使用的保存格式
- 脚本命令:
ImageDocumentGetCurrentFileSaveFormat()
ImageDocumentSetCurrentFileSaveFormat()
- 当前文件路径:
- 默认值:打开的来源,或者为空
- 脚本命令:
ImageDocumentGetCurrentFile()
ImageDocumentSetCurrentFile()
- A 脏状态:
- 默认值:打开时干净,创建时脏
- 脚本命令:
ImageDocumentIsDirty()
ImageDocumentClean()
- 一个链接到文件的状态:
- 默认值:打开时为true,创建时为false
- 脚本命令:
ImageDocumentIsLinkedToFile()
- A 保存格式(“Gatan 格式”,“TIFF 格式”,...)
有两种方法保存imageDocument:
正在将当前文档本身保存到光盘:
void ImageDocumentSave( ImageDocument imgDoc, Number save_style )
这利用 imageDocument 的当前属性将其保存到当前路径当前格式,在此过程中将其标记为干净。
save_style
参数确定程序如何处理丢失的信息:- 0 = 从不询问路径
- 1 = 询问是否未链接(或空路径)
- 2 = 总是问
正在将当前文档的副本保存到光盘:
void ImageDocumentSaveToFile( ImageDocument imgDoc, String handler, String fileName )
这将以提供的格式复制并保存文件到提供的路径下。内存中的imageDocument并没有改变它的属性。最值得注意的是:它确实 not 变得干净,并且 not 链接到光盘上提供的文件。
filename
参数指定保存位置包括文件名。如果提供了 文件扩展名 ,它必须与文件格式匹配,但可以省略。
handler
参数指定了文件格式并且可以是 GMS 当前支持的任何内容,例如:Gatan Format
Gatan 3 Format
GIF Format
BMP Format
JPEG/JFIF Format
Enhanced Metafile Format
简而言之:
要以不同的格式保存当前打开的 imageDocument,您需要执行以下操作:
imageDocument doc = GetFrontImageDocument()
doc.ImageDocumentSetCurrentFileSaveFormat("TIFF Format")
doc.ImageDocumentSave(0)
如果只是保存当前状态的副本,您可以使用:
imageDocument doc = GetFrontImageDocument()
string path = doc.ImageDocumentGetCurrentFile() // full path including extension!
path = PathExtractDirectory(path,0) + PathExtractBaseName(path,0) // path without file extension
doc.ImageDocumentSaveToFile("TIFF Format", path )