如何将 .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 )