private void read_tiff_init(Tiff input)
{
short directorycount = input.NumberOfDirectories();
m_tiff_pages = new T2P_PAGE [directorycount];
for (int p = 0; p < directorycount; p++)
m_tiff_pages[p] = new T2P_PAGE();
FieldValue[] result = null;
for (short i = 0; i < directorycount; i++)
{
int subfiletype = 0;
if (!input.SetDirectory(i))
{
Tiff.Error(Tiff2PdfConstants.TIFF2PDF_MODULE,
"Can't set directory {0} of input file {1}", i, input.FileName());
return;
}
result = input.GetField(TiffTag.PAGENUMBER);
if (result != null)
{
short pagen = result[0].ToShort();
short paged = result[1].ToShort();
if ((pagen > paged) && (paged != 0))
m_tiff_pages[m_tiff_pagecount].page_number = paged;
else
m_tiff_pages[m_tiff_pagecount].page_number = pagen;
}
else
{
result = input.GetField(TiffTag.SUBFILETYPE);
if (result != null)
{
subfiletype = result[0].ToInt();
if ((((FileType)subfiletype & FileType.PAGE) == 0) && (subfiletype != 0))
continue;
}
else
{
result = input.GetField(TiffTag.OSUBFILETYPE);
if (result != null)
{
subfiletype = result[0].ToInt();
if (((OFileType)subfiletype != OFileType.IMAGE) && ((OFileType)subfiletype != OFileType.PAGE) && (subfiletype != 0))
continue;
}
}
m_tiff_pages[m_tiff_pagecount].page_number = m_tiff_pagecount;
}
m_tiff_pages[m_tiff_pagecount].page_directory = i;
if (input.IsTiled())
m_tiff_pages[m_tiff_pagecount].page_tilecount = input.NumberOfTiles();
m_tiff_pagecount++;
}
IComparer myComparer = new cmp_t2p_page();
Array.Sort(m_tiff_pages, myComparer);
for (short i = 0; i < m_tiff_pagecount; i++)
{
m_pdf_xrefcount += 5;
input.SetDirectory(m_tiff_pages[i].page_directory);
result = input.GetField(TiffTag.PHOTOMETRIC);
if ((result != null && ((Photometric)result[0].ToInt() == Photometric.PALETTE)) || input.GetField(TiffTag.INDEXED) != null)
{
m_tiff_pages[i].page_extra++;
m_pdf_xrefcount++;
}
result = input.GetField(TiffTag.COMPRESSION);
if (result != null)
{
Compression xuint16 = (Compression)result[0].ToInt();
if ((xuint16 == Compression.DEFLATE || xuint16 == Compression.ADOBE_DEFLATE)
&& ((m_tiff_pages[i].page_tilecount != 0) || input.NumberOfStrips() == 1)
&& !m_pdf_nopassthrough)
{
if (m_pdf_minorversion < 2)
m_pdf_minorversion = 2;
}
}
result = input.GetField(TiffTag.TRANSFERFUNCTION);
if (result != null)
{
m_tiff_transferfunction[0] = result[0].GetBytes();
m_tiff_transferfunction[1] = result[1].GetBytes();
m_tiff_transferfunction[2] = result[2].GetBytes();
if (m_tiff_transferfunction[1] != m_tiff_transferfunction[0])
{
m_tiff_transferfunctioncount = 3;
m_tiff_pages[i].page_extra += 4;
m_pdf_xrefcount += 4;
}
else
{
m_tiff_transferfunctioncount = 1;
m_tiff_pages[i].page_extra += 2;
m_pdf_xrefcount += 2;
}
if (m_pdf_minorversion < 2)
m_pdf_minorversion = 2;
}
else
{
m_tiff_transferfunctioncount = 0;
}
result = input.GetField(TiffTag.ICCPROFILE);
if (result != null)
{
m_tiff_iccprofilelength = result[0].ToInt();
m_tiff_iccprofile = result[1].ToByteArray();
m_tiff_pages[i].page_extra++;
m_pdf_xrefcount++;
if (m_pdf_minorversion < 3)
m_pdf_minorversion = 3;
}
//m_tiff_tiles[i].tiles_tilecount = m_tiff_pages[i].page_tilecount;
result = input.GetField(TiffTag.PLANARCONFIG);
if (result != null && ((PlanarConfig)result[0].ToShort() == PlanarConfig.SEPARATE))
{
result = input.GetField(TiffTag.SAMPLESPERPIXEL);
int xuint16 = result[0].ToInt();
m_tiff_pages[i].page_tilecount /= xuint16;
}
if (m_tiff_pages[i].page_tilecount > 0)
{
m_pdf_xrefcount += (m_tiff_pages[i].page_tilecount - 1) * 2;
result = input.GetField(TiffTag.TILEWIDTH);
m_tiff_pages[i].tiles_tilewidth = result[0].ToInt();
input.GetField(TiffTag.TILELENGTH);
m_tiff_pages[i].tiles_tilelength = result[0].ToInt();
m_tiff_pages[i].tiles_tiles = new T2P_TILE[m_tiff_pages[i].page_tilecount];
for (int idx = 0; idx < m_tiff_pages[i].page_tilecount; idx++)
m_tiff_pages[i].tiles_tiles[idx] = new T2P_TILE();
}
}
}