internal int newScanlineSize()
{
int scanline;
if (m_dir.td_planarconfig == PlanarConfig.CONTIG)
{
if (m_dir.td_photometric == Photometric.YCBCR && !IsUpSampled())
{
FieldValue[] result = GetField(TiffTag.YCBCRSUBSAMPLING);
ushort ycbcrsubsampling0 = result[0].ToUShort();
ushort ycbcrsubsampling1 = result[1].ToUShort();
if (ycbcrsubsampling0 * ycbcrsubsampling1 == 0)
{
ErrorExt(this, m_clientdata, m_name, "Invalid YCbCr subsampling");
return 0;
}
return ((((m_dir.td_imagewidth + ycbcrsubsampling0 - 1) / ycbcrsubsampling0) * (ycbcrsubsampling0 * ycbcrsubsampling1 + 2) * m_dir.td_bitspersample + 7) / 8) / ycbcrsubsampling1;
}
else
{
scanline = multiply(m_dir.td_imagewidth, m_dir.td_samplesperpixel, "TIFFScanlineSize");
}
}
else
{
scanline = m_dir.td_imagewidth;
}
return howMany8(multiply(scanline, m_dir.td_bitspersample, "TIFFScanlineSize"));
}