0

我目前有这个:

[filename, pathname, filterindex] = uiputfile({...
   ... (various filetypes)   
    'Disks image.jpg');
    if isequal(filename,0) || isequal(pathname,0)
        disp('User selected Cancel');
    else
        disp(['User selected ',fullfile(pathname,filename)]);
    end
    imwrite(M, 'Disks image.jpg', 'jpg');
    disp('Image saved');
end

我将如何为当前说“Disks image.jpg”的部分编写一个名称,即当前时间(由以下内容给出):

dateTime = javaMethod('currentTimeMillis', 'java.lang.System');

或者一个由该名称和其他指定名称组合而成的名称(例如 currentTimeMillis_Diffraction_pattern.jpg)

当我保存两个图像文件时,如果我可以通过第二种方法命名文件会很好,因为它提供了一个有序列表,而无需将两个图像分隔到不同的文件夹中。

使用时间...........+............_Diffraction_pattern.extension 会很棒

谢谢

4

2 回答 2

2

不知道为什么您使用 Java 函数来获取时间,而不是内置于 Matlab 时间函数。我会用

dateTimeString = datestr(now, 'yyyy-mm-dd-HH_MM_SS_FFF');

然后将其与您要创建文件名的任何名称连接起来:

myFileName = [dateTimeString '_withSomeName.jpg'];
imwrite( M, myFileName, 'jpg' );

注意 - 我认为如果您.jpg在文件中包含扩展名,它将自动转换为,imwrite因此您不需要第三个参数。另请注意,使用FFF格式说明符将使您的时间减少到毫秒 - 因此它具有与原始 Java 函数调用相同的功能(和粒度),但会产生更合理的文件名。

如果您坚持使用 Java 函数,则需要将其转换为 Matlab 的内部时钟 - 这意味着像这样(未经测试):

timeNow = javaMethod('currentTimeMillis', 'java.lang.System');
timeMatlab = timeNow / (1000 * 3600 * 24) + datenum('1 Jan 1970');
dateTimeString = datestr(timeMatlab, 'yyyy-mm-dd-HH_MM_SS');

但你为什么要那样做……

于 2013-07-22T18:16:29.333 回答
1

字符串连接可以这样完成:

filename=[num2str(dateTime) '_Diffraction_pattern.extension'];

或使用 sprintf:

filename=sprintf('%d_Diffraction_pattern.extension',dateTime);
于 2013-07-22T18:06:07.293 回答