使用 boost 的新手。使用它来加载图像集合。问题是文件夹中的图像数量将继续增长,我最终不想将它们全部添加到我的显示程序中。我在 OS X 上并使用 C++。
如何调整此示例代码以仅从目录的顶部或底部加载 30 张图像?只加载最新的文件会很棒,但我会满足于改变它。不幸的是,在我的循环中只说 (it <30) 是行不通的,因为它需要等效于 fs::directory_iterator。
示例代码:
fs::path pPhoto( photobooth_texture_path );
for ( fs::directory_iterator it( pPhoto ); it != fs::directory_iterator(); ++it )
{
if ( fs::is_regular_file( *it ) )
{
// -- Perhaps there is a better way to ignore hidden files
string photoFileName = it->path().filename().string();
if( !( photoFileName.compare( ".DS_Store" ) == 0 ) )
{
photoboothTex.push_back( gl::Texture( loadImage( photobooth_texture_path + photoFileName ), mipFmt) );
cout << "Loaded: " << photoFileName <<endl;
}
}
}
编辑:这就是我最终这样做的方式。有点混合了这两种方法,但我需要向后排序,即使它不一定是可以预见的倒退……抓住我的机会。不是世界上最干净的东西,但我必须将他们的想法转化为我理解的 C++ 风格
vector<string> fileList;
int count = 0;
photoboothTex.clear();//clear this out to make way for new photos
fs::path pPhoto( photobooth_texture_path );
for ( fs::directory_iterator it( pPhoto ); it != fs::directory_iterator(); ++it ) {
if ( fs::is_regular_file( *it ) )
{
// -- Perhaps there is a better way to ignore hidden files
string photoFileName = it->path().filename().string();
if( !( photoFileName.compare( ".DS_Store" ) == 0 ) )
{
fileList.push_back(photoFileName);
}
}
}
for (int i=(fileList.size()-1); i!=0; i--) {
photoboothTex.push_back( gl::Texture( loadImage( photobooth_texture_path + fileList[i%fileList.size()] )) );
cout << "Loaded Photobooth: " << fileList[i%fileList.size()] <<endl;
if(++count ==40) break; //loads a maximum of 40 images
}