Ejemplo n.º 1
0
int
main (int argc, char ** argv)
{
  std::ifstream input ("converted.txt");
  std::string filename;
  std::vector<std::string> filenames;
  std::vector<bool> depths;
  std::vector<std::pair<std::string, std::string> > pairs;
  while (input >> filename)
  {
    filenames.push_back (filename);
    depths.push_back (filename.find (".jpg") == std::string::npos);
  }
  input.close();

  for (int i = 0; i < filenames.size() - 1; ++i)
  {
    if (depths[i] != depths[i + 1])
    {
      std::string depth = depths[i] ? filenames[i] : filenames[ i + 1];
      std::string rgb = depths [i] ? filenames[i + 1]: filenames[i];
      pairs.push_back(make_pair(rgb, depth));
      ++i;
    }
  }

  for (int i = 0; i < pairs.size(); ++i)
  {
    std::stringstream ss1;
    ss1 << "converted/" << pairs[i].first;
    std::stringstream ss1_new;
    ss1_new << "images/" << i << ".jpg";
    std::ifstream inputRGB (ss1.str().c_str());
    std::ofstream outputRGB (ss1_new.str().c_str());
    outputRGB << inputRGB.rdbuf();
    outputRGB.close();
    inputRGB.close();

    std::stringstream ss2;
    ss2 << "converted/" << pairs[i].second;
    std::stringstream ss2_new;
    ss2_new << "images/" << i << ".txt";
    std::ifstream inputDepth (ss2.str().c_str());
    std::ofstream outputDepth (ss2_new.str().c_str());
    outputDepth << inputDepth.rdbuf();
    outputDepth.close();
    inputDepth.close();
    std::cout << 100*i/pairs.size() << "% complete" << std::endl;
  }

  return 0;
}
Ejemplo n.º 2
0
void transformsChain::runTransform(
            const ptr<image>& inputImage,
            std::uint32_t inputTopLeftX, std::uint32_t inputTopLeftY, std::uint32_t inputWidth, std::uint32_t inputHeight,
            const ptr<image>& outputImage,
            std::uint32_t outputTopLeftX, std::uint32_t outputTopLeftY)
{
	if(isEmpty())
	{
		ptr<transformHighBit> highBit(new transformHighBit);
		highBit->runTransform(inputImage, inputTopLeftX, inputTopLeftY, inputWidth, inputHeight, outputImage, outputTopLeftX, outputTopLeftY);
		return;
	}

	if(m_transformsList.size() == 1)
	{
		m_transformsList.front()->runTransform(inputImage, inputTopLeftX, inputTopLeftY, inputWidth, inputHeight,
			outputImage, outputTopLeftX, outputTopLeftY);
		return;
	}

	// Get the position of the last transform
	///////////////////////////////////////////////////////////
	tTransformsList::iterator lastTransform(m_transformsList.end());
	--lastTransform;

	std::wstring inputColorSpace(inputImage->getColorSpace());
	image::bitDepth inputDepth(inputImage->getDepth());
	std::uint32_t inputHighBit(inputImage->getHighBit());
	std::wstring outputColorSpace(outputImage->getColorSpace());
	image::bitDepth outputDepth(outputImage->getDepth());
	std::uint32_t outputHighBit(outputImage->getHighBit());
	std::uint32_t allocateRows = 65536 / inputWidth;
	if(allocateRows < 1)
	{
		allocateRows = 1;
	}
	if(allocateRows > inputHeight)
	{
		allocateRows = inputHeight;
	}

	// Allocate temporary images
	///////////////////////////////////////////////////////////
	if(
		m_inputWidth != inputWidth ||
		m_inputHeight != inputHeight ||
		m_inputColorSpace != inputColorSpace ||
		m_inputDepth != inputDepth ||
		m_inputHighBit != inputHighBit ||
		m_outputColorSpace != outputColorSpace ||
		m_outputDepth != outputDepth ||
		m_outputHighBit != outputHighBit)
	{
		m_inputWidth = inputWidth;
		m_inputHeight = inputHeight;
		m_inputColorSpace = inputColorSpace;
		m_inputDepth = inputDepth;
		m_inputHighBit = inputHighBit;
		m_outputColorSpace = outputColorSpace;
		m_outputDepth = outputDepth;
		m_outputHighBit = outputHighBit;

		m_temporaryImages.clear();
		tTransformsList::iterator scanTransforms(m_transformsList.begin());
		m_temporaryImages.push_back((*scanTransforms)->allocateOutputImage(inputImage, inputWidth, allocateRows));
		while(++scanTransforms != lastTransform)
		{
			m_temporaryImages.push_back((*scanTransforms)->allocateOutputImage(m_temporaryImages.back(), inputWidth, allocateRows));
		}
	}

	// Run all the transforms. Split the images into several
	//  parts
	///////////////////////////////////////////////////////////
	while(inputHeight != 0)
	{
		std::uint32_t rows = allocateRows;
		if(rows > inputHeight)
		{
			rows = inputHeight;
		}
		inputHeight -= rows;
		
		tTransformsList::iterator scanTransforms(m_transformsList.begin());
		tTemporaryImagesList::iterator scanTemporaryImages(m_temporaryImages.begin());
		
		(*scanTransforms)->runTransform(inputImage, inputTopLeftX, inputTopLeftY, inputWidth, rows, *scanTemporaryImages, 0, 0);
		inputTopLeftY += rows;

		while(++scanTransforms != lastTransform)
		{
			ptr<image> temporaryInput(*(scanTemporaryImages++));
			ptr<image> temporaryOutput(*scanTemporaryImages);

			(*scanTransforms)->runTransform(temporaryInput, 0, 0, inputWidth, rows, temporaryOutput, 0, 0);
		}

		m_transformsList.back()->runTransform(*scanTemporaryImages, 0, 0, inputWidth, rows, outputImage, outputTopLeftX, outputTopLeftY);
		outputTopLeftY += rows;
	}
}