int main(int argc, char *argv[]) { std::vector<std::string> files; if(argc < 2) return 0; GetFiles(std::string(argv[1]), files); if(files.size() < 1) return 0; ilInit(); iluInit(); ilEnable( IL_ORIGIN_SET ); ilOriginFunc( IL_ORIGIN_UPPER_LEFT ); ilEnable( IL_TYPE_SET ); ilSetInteger( IL_TYPE_MODE, IL_UNSIGNED_BYTE ); std::list<CImageTree *> m_imageTree; CImageTree *imageTree = new CImageTree(ATLAS_WIDTH, ATLAS_HEIGHT); m_imageTree.push_back(imageTree); std::vector<CImage *> m_imageList; for(std::vector<std::string>::const_iterator ifiles = files.begin(); ifiles != files.end(); ++ifiles ) { std::string file = (*ifiles); CImage *image = new CImage(file); // no image if(image->GetWidth() == 0 || image->GetHeight() == 0) { delete image; continue; } // add image by size in image list bool nAdd = false; for(std::vector<CImage *>::iterator iimage = m_imageList.begin(); iimage != m_imageList.end(); ++iimage ) { CImage *image_check = (*iimage); if((image->GetWidth() * image->GetHeight()) > (image_check->GetWidth() * image_check->GetHeight())) { m_imageList.insert(iimage--, image); nAdd = true; break; } } if(!nAdd) m_imageList.push_back(image); } for(std::vector<CImage *>::const_iterator iimage = m_imageList.begin(); iimage != m_imageList.end(); ++iimage ) { CImage *image = (*iimage); // image does not fit in map at all if(image->GetWidth() > ATLAS_WIDTH || image->GetHeight() > ATLAS_HEIGHT) { printf("Image : %s to big\n", image->GetFileName().c_str()); continue; } // insert image in map for(std::list<CImageTree *>::const_iterator itree = m_imageTree.begin(); itree != m_imageTree.end(); ++itree) { CImageTree *imageTree = (*itree); if(imageTree->Insert(image, 0)) { image = NULL; break; } } // start a new map if the image was not added to the existing map's if(image != NULL) { CImageTree *imageTree = new CImageTree(ATLAS_WIDTH, ATLAS_HEIGHT); m_imageTree.push_back(imageTree); if(!imageTree->Insert(image, 0)) printf("File : %s does not fit\n", image->GetFileName().c_str()); } } int count = 0; for( std::list<CImageTree *>::const_iterator itree = m_imageTree.begin(); itree != m_imageTree.end(); ++itree ) { CImageTree *imageTree = (*itree); std::stringstream ss; ss << count; std::string filename = "media-2048-" + ss.str() + ".png"; imageTree->SaveImage(filename); filename = "media-2048-" + ss.str() + ".txt"; imageTree->SaveIndex(filename); imageTree->Print(); count++; } // TODO: clean memory ilShutDown(); return 1; }