123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #include "core/image/ImageFileListWriter.h"
- #include "core/image/Convert.h"
- #include "core/basics/FileName.h"
- #include <sstream>
- namespace NICE {
- ImageFileListWriter::ImageFileListWriter(const std::string& path,
- const std::string& extension,
- const bool _keepImagesInMemory)
- : nameExtension(extension), currentFrame(0),
- keepImagesInMemory(_keepImagesInMemory) {
- init(path);
- }
- ImageFileListWriter::~ImageFileListWriter() {
- close();
- }
- void ImageFileListWriter::writeColorImage(const ColorImage& image) {
- m_lastImageFileName = makeCurrentFileName();
- if (keepImagesInMemory) {
- ColorImage* imageCopy = new ColorImage(image);
- images.push_back(imageCopy);
- fileNames.push_back(new std::string(m_lastImageFileName));
- } else {
- //image.writePPM(fileName);
- image.write(ImageFile(m_lastImageFileName));
- addToFileList(m_lastImageFileName);
- }
- currentFrame++;
- }
- void ImageFileListWriter::writeGrayImage(const Image& image) {
- m_lastImageFileName = makeCurrentFileName();
- if (keepImagesInMemory) {
- ColorImage* imageCopy = grayToRGB(image);
- images.push_back(imageCopy);
- fileNames.push_back(new std::string(m_lastImageFileName));
- } else {
- //std::auto_ptr<ColorImage> imageCopy(grayToRGB(image));
- //imageCopy->writePPM(fileName);
- image.write(ImageFile(m_lastImageFileName));
- addToFileList(m_lastImageFileName);
- }
- currentFrame++;
- }
- void ImageFileListWriter::close() {
- flushMemoryBuffer();
- /*if (keepImagesInMemory) {
- for (unsigned int i = 0; i < images.size(); i++) {
- std::string* fileName = fileNames.at(i);
- ColorImage* image = images.at(i);
- //image->writePPM(*fileName);
- image->write(ImageFile(*fileName));
- addToFileList(*fileName);
- delete image;
- delete fileName;
- }
- }*/
- fileList.close();
- }
- void ImageFileListWriter::init(const std::string& path) {
- FileName thePath(path);
- thePath.removeSlash();
- FileName subdir = thePath.extractFileName();
- thePath.createDirectory();
- thePath.addSlash();
- namePrefix = thePath.str() + subdir.str();
- fileListFileName = namePrefix + ".txt";
- fileList.open(fileListFileName.c_str());
- if (!fileList.good()) {
- throw ImageException(
- std::string("ImageFileListWriter: Error creating filelist ")
- + fileListFileName);
- }
- }
- std::string ImageFileListWriter::makeCurrentFileName() {
- std::ostringstream counterStream;
- counterStream << currentFrame;
- std::string counter = counterStream.str();
- while (counter.length() < 5) {
- counter = "0" + counter;
- }
- return namePrefix + "_" + counter + nameExtension;//".ppm";
- }
- void ImageFileListWriter::addToFileList(const std::string& fileName) {
- FileName name(fileName);
- fileList << name.extractFileName() << std::endl;
- }
- void ImageFileListWriter::insertMissingFrames(int frames) {
- currentFrame += frames;
- }
- void ImageFileListWriter::flushMemoryBuffer() {
- if (keepImagesInMemory) {
- for (unsigned int i = 0; i < images.size(); i++) {
- std::string* fileName = fileNames.at(i);
- ColorImage* image = images.at(i);
- //image->writePPM(*fileName);
- image->write(ImageFile(*fileName));
- addToFileList(*fileName);
- delete image;
- delete fileName;
- }
- images.clear();
- fileNames.clear();
- }
- }
- } // namespace
|