2016-06-27 35 views

回答

1

我相信你會負責的閱讀這個目錄。 C庫dirent.h是我首先想到的,但我相信有更好的C++/system/framework技術。

#include <iostream> 
#include <vector> 
#include <dirent.h> 
#include <Magick++.h> 

int main(int argc, const char * argv[]) { 

    std::vector<Magick::Image> stack;   // Hold images found 
    DIR * dir_handler = opendir("/tmp/images"); // Open dir 
    struct dirent * dir_entry; 

    if (dir_handler != NULL) 
    { 
     // Iterate over entries in directory 
     while ((dir_entry = readdir(dir_handler)) != NULL) { 
      // Only act on regular files 
      if (dir_entry->d_type == DT_REG) { 
       // Concatenate path (could be better) 
       std::string filename("/tmp/images/"); 
       filename += dir_entry->d_name; 
       // Read image at path 
       stack.push_back(Magick::Image(filename)); 
      } 
     } 
     closedir(dir_handler); // House keeping 
    } else { 
     // Handle DIR error 
    } 

    // Append all images into single montage 
    Magick::Image output; 
    Magick::appendImages(&output, stack.begin(), stack.end()); 
    output.write("/tmp/all.png"); 

    return 0; 
} 

MagickCore庫中還有ExpandFilenames(int *,char ***)

// Patterns to scan 
int pattern_count = 1; 
// First pattern 
char pattern[PATH_MAX] = "/tmp/images/*.png"; 
// Allocate memory for list of patterns 
char ** dir_pattern = (char **)MagickCore::AcquireMagickMemory(sizeof(char *)); 
// Assign first pattern 
dir_pattern[0] = pattern; 
// Expand patterns 
Magick::MagickBooleanType ok; 
ok = MagickCore::ExpandFilenames(&pattern_count, &dir_pattern); 

if (ok == Magick::MagickTrue) { 
    std::vector<Magick::Image> stack; 
    // `pattern_count' now holds results count 
    for (int i = 0; i < pattern_count; ++i) { 
     // `dir_pattern' has been re-allocated with found results 
     std::string filename(dir_pattern[i]); 
     stack.push_back(Magick::Image(filename)); 
    } 
    Magick::Image output; 
    Magick::appendImages(&output, stack.begin(), stack.end()); 
    output.write("/tmp/all.png"); 
} else { 
    // Error handle 
} 
相關問題