示例#1
0
  void start(const ToonzScene &scene) {
    m_status      = 3;
    m_alphaNeeded = scene.getProperties()->getBgColor().m < 255;
    assert(m_started == false);
    m_started = true;
    if (TSystem::doesExistFileOrLevel(m_filepath))
      TSystem::removeFileOrLevel(m_filepath);

    m_lw = TLevelWriterP(m_filepath);
    m_lw->setFrameRate(m_fps);
    if (m_lw->getProperties() && m_fileOptions)
      m_lw->getProperties()->setProperties(m_fileOptions);

    if (m_st) m_lw->saveSoundTrack(m_st.getPointer());
  }
示例#2
0
bool Convert2Tlv::init(std::string &errorMessage)
{
	m_lastIndex = m_maxPaletteIndex = 0;
	m_colorMap.clear();

	try {
		m_lr1 = TLevelReaderP(m_levelIn1);
		if (m_lr1)
			m_level1 = m_lr1->loadInfo();
	} catch (...) {
		errorMessage = "Error: can't read level " + toString(m_levelIn1.getWideString());
		return false;
	}

	if (m_level1->getFrameCount() == 0) {
		errorMessage = "Error: can't find level " + toString(m_levelIn1.getWideString());
		return false;
	}

	TLevelP level2;

	if (m_levelIn2 != TFilePath()) {
		try {
			m_lr2 = TLevelReaderP(m_levelIn2);
			if (m_lr2)
				level2 = m_lr2->loadInfo();
		} catch (...) {
			errorMessage = "Error: can't read level " + toString(m_levelIn2.getWideString());
			return false;
		}

		if (level2->getFrameCount() == 0) {
			errorMessage = "Error: can't find level " + toString(m_levelIn2.getWideString());
			return false;
		}

		if (m_level1->getFrameCount() != level2->getFrameCount()) {
			errorMessage = "Error: the two input levels must have same frame number";
			return false;
		}
	}

	m_size = TDimension();

	m_lw = TLevelWriterP(m_levelOut);
	m_it = m_level1->begin();

	TLevel::Iterator it2;

	if (level2->getFrameCount() > 0)
		it2 = level2->begin();

	for (; m_it != m_level1->end(); ++m_it) {
		TImageReaderP ir1 = m_lr1->getFrameReader(m_it->first);
		const TImageInfo *info1 = ir1->getImageInfo();
		if (!info1) {
			errorMessage = "Error: can't read frame " + toString(m_it->first.getNumber()) + " of level  " + toString(m_levelIn1.getWideString());
			return false;
		}

		if (info1->m_bitsPerSample != 8) {
			errorMessage = "Error: all frames must have 8 bits per channel!\n";
			return false;
		}
		m_size.lx = tmax(m_size.lx, info1->m_lx);
		m_size.ly = tmax(m_size.ly, info1->m_ly);

		if (m_lr2 != TLevelReaderP()) {
			TImageReaderP ir2 = m_lr2->getFrameReader(it2->first);

			if (ir2) {
				const TImageInfo *info2 = ir2->getImageInfo();
				if (!info1) {
					errorMessage = "Error: can't read frame " + toString(it2->first.getNumber()) + " of level  " + toString(m_levelIn2.getWideString());
					;
					return false;
				}

				if (info1->m_lx != info2->m_lx || info1->m_ly != info2->m_ly) {
					errorMessage = "Error: painted frames must have same resolution of matching unpainted frames!\n";
					return false;
				}
				if (info2->m_bitsPerSample != 8) {
					errorMessage = "Error: all frames must have 8 bits per channel!\n";
					return false;
				}
			}
			++it2;
		}
	}

	m_palette = new TPalette();

	if (m_palettePath != TFilePath()) {
		TIStream is(m_palettePath);
		is >> m_palette;
		if (m_palette->getStyleInPagesCount() == 0) {
			errorMessage = "Error: invalid palette!\n";

			return false;
		}
		for (int i = 0; i < m_palette->getStyleCount(); i++)
			if (m_palette->getStylePage(i)) {
				m_colorMap[m_palette->getStyle(i)->getMainColor()] = i;
				if (i > m_lastIndex)
					m_lastIndex = i;
			}
		assert(m_colorMap.size() == m_palette->getStyleInPagesCount());
	}
示例#3
0
 void close() {
   m_lw = TLevelWriterP();
   m_st = TSoundTrackP();
 }