将文件夹的图像名称加载到 Matlab 列表框
load folder's images names to a Matlab listbox
我正在尝试将我使用 matlab GUI select编辑的特定文件夹中存在的所有图像名称加载到列表框中。
问题是当我 select 文件夹时:
如果它是空的,我可以看到列表是空的,背景颜色是白色(这是正确的)。
但是当我 select 一个包含图像的文件夹时,列表框从 GUI 中消失。我收到一条警告:
警告:单selection 列表框控件需要标量值
控件在其所有参数值都有效之前不会被渲染
我在这个问题上卡了很久,一直找不到解决的方法
这是我试过的代码:
% --- Load up the listbox with tif files in folder handles.handles.ImageFolder
function handles=LoadImageList(handles)
ListOfImageNames = {};
folder = handles.ImageFolder;
if ~isempty(handles.ImageFolder)
if exist(folder,'dir') == false
warningMessage = sprintf('Note: the folder used when this program was last run:\n%s\ndoes not exist on this computer.\nPlease run Step 1 to select an image folder.', handles.ImageFolder);
msgboxw(warningMessage);
return;
end
else
msgboxw('No folder specified as input for function LoadImageList.');
return;
end
% If it gets to here, the folder is good.
ImageFiles = dir([handles.ImageFolder '/*.*']);
for Index = 1:length(ImageFiles)
baseFileName = ImageFiles(Index).name;
[folder, name, extension] = fileparts(baseFileName);
extension = upper(extension);
switch lower(extension)
case {'.png', '.bmp', '.jpg', '.tif', '.avi'}
% Allow only PNG, TIF, JPG, or BMP images
ListOfImageNames = [ListOfImageNames baseFileName];
otherwise
end
end
set(handles.lstImageList,'string',ListOfImageNames);
return
问题在于您创建的方式 ListOfImageNames
。您的代码的结果是一个长字符串,其中包含所有图像名称,没有任何 space 或分隔符。
MATLAB listbox
的 String
属性 需要一个元胞数组,其中包含每行的条带。你可以试试这个:
ListOfImageNames =[];
NumOfImages = 0;
ImageFiles = dir([handles.ImageFolder '/*.*']);
for Index = 1:length(ImageFiles)
baseFileName = ImageFiles(Index).name;
[folder, name, extension] = fileparts(baseFileName);
extension = upper(extension);
switch lower(extension)
case {'.png', '.bmp', '.jpg', '.tif', '.avi'}
% Allow only PNG, TIF, JPG, or BMP images
NumOfImages = NumOfImages + 1;
ListOfImageNames{NumOfImages} = baseFileName;
otherwise
end
end
set(handles.lstImageList,'string',ListOfImageNames);
当 Matlab uicontrol
的某些参数设置为无效值时,就会发生这种情况。 Matlab 选择不显示它们。
对于您的情况,错误消息告诉您 Value
参数不正确。
你的listbox
被定义为“单选”,这意味着你一次只能选择一行。 Value
参数表示选中的行号。此参数必须是 "scalar",单个数字,而不是表示所选多行的向量(可能使用 "multi-selection" 列表框)。
请注意,Matlab 也不支持空的 Value
,因此如果您的 Value
设置为 []
,则在填充 lisbox 时也会出错。 (至少我的 R2009a 版本没有)
解决这个问题的简单方法是在填充 listbox
:
的同时设置 Value
set(handles.lstImageList,'string',ListOfImageNames,'Value',1);
我正在尝试将我使用 matlab GUI select编辑的特定文件夹中存在的所有图像名称加载到列表框中。
问题是当我 select 文件夹时:
如果它是空的,我可以看到列表是空的,背景颜色是白色(这是正确的)。
但是当我 select 一个包含图像的文件夹时,列表框从 GUI 中消失。我收到一条警告:
警告:单selection 列表框控件需要标量值
控件在其所有参数值都有效之前不会被渲染
我在这个问题上卡了很久,一直找不到解决的方法
这是我试过的代码:
% --- Load up the listbox with tif files in folder handles.handles.ImageFolder
function handles=LoadImageList(handles)
ListOfImageNames = {};
folder = handles.ImageFolder;
if ~isempty(handles.ImageFolder)
if exist(folder,'dir') == false
warningMessage = sprintf('Note: the folder used when this program was last run:\n%s\ndoes not exist on this computer.\nPlease run Step 1 to select an image folder.', handles.ImageFolder);
msgboxw(warningMessage);
return;
end
else
msgboxw('No folder specified as input for function LoadImageList.');
return;
end
% If it gets to here, the folder is good.
ImageFiles = dir([handles.ImageFolder '/*.*']);
for Index = 1:length(ImageFiles)
baseFileName = ImageFiles(Index).name;
[folder, name, extension] = fileparts(baseFileName);
extension = upper(extension);
switch lower(extension)
case {'.png', '.bmp', '.jpg', '.tif', '.avi'}
% Allow only PNG, TIF, JPG, or BMP images
ListOfImageNames = [ListOfImageNames baseFileName];
otherwise
end
end
set(handles.lstImageList,'string',ListOfImageNames);
return
问题在于您创建的方式 ListOfImageNames
。您的代码的结果是一个长字符串,其中包含所有图像名称,没有任何 space 或分隔符。
MATLAB listbox
的 String
属性 需要一个元胞数组,其中包含每行的条带。你可以试试这个:
ListOfImageNames =[];
NumOfImages = 0;
ImageFiles = dir([handles.ImageFolder '/*.*']);
for Index = 1:length(ImageFiles)
baseFileName = ImageFiles(Index).name;
[folder, name, extension] = fileparts(baseFileName);
extension = upper(extension);
switch lower(extension)
case {'.png', '.bmp', '.jpg', '.tif', '.avi'}
% Allow only PNG, TIF, JPG, or BMP images
NumOfImages = NumOfImages + 1;
ListOfImageNames{NumOfImages} = baseFileName;
otherwise
end
end
set(handles.lstImageList,'string',ListOfImageNames);
当 Matlab uicontrol
的某些参数设置为无效值时,就会发生这种情况。 Matlab 选择不显示它们。
对于您的情况,错误消息告诉您 Value
参数不正确。
你的listbox
被定义为“单选”,这意味着你一次只能选择一行。 Value
参数表示选中的行号。此参数必须是 "scalar",单个数字,而不是表示所选多行的向量(可能使用 "multi-selection" 列表框)。
请注意,Matlab 也不支持空的 Value
,因此如果您的 Value
设置为 []
,则在填充 lisbox 时也会出错。 (至少我的 R2009a 版本没有)
解决这个问题的简单方法是在填充 listbox
:
Value
set(handles.lstImageList,'string',ListOfImageNames,'Value',1);