public int ScanlineSize()
{
int scanline;
if (m_dir.td_planarconfig == PlanarConfig.CONTIG)
{
if (m_dir.td_photometric == Photometric.YCBCR && !IsUpSampled())
{
FieldValue[] result = GetFieldDefaulted(TiffTag.YCBCRSUBSAMPLING);
short ycbcrsubsampling0 = result[0].ToShort();
if (ycbcrsubsampling0 == 0)
{
ErrorExt(this, m_clientdata, m_name, "Invalid YCbCr subsampling");
return 0;
}
scanline = roundUp(m_dir.td_imagewidth, ycbcrsubsampling0);
scanline = howMany8(multiply(scanline, m_dir.td_bitspersample, "ScanlineSize"));
return summarize(scanline, multiply(2, scanline / ycbcrsubsampling0, "VStripSize"), "VStripSize");
}
else
{
scanline = multiply(m_dir.td_imagewidth, m_dir.td_samplesperpixel, "ScanlineSize");
}
}
else
{
scanline = m_dir.td_imagewidth;
}
return howMany8(multiply(scanline, m_dir.td_bitspersample, "ScanlineSize"));
}