public bool InitializeLibJPEG(bool force_encode, bool force_decode)
{
int[] byte_counts = null;
bool data_is_empty = true;
bool decompress;
if (m_cinfo_initialized)
{
if (force_encode && m_common.IsDecompressor)
TIFFjpeg_destroy();
else if (force_decode && !m_common.IsDecompressor)
TIFFjpeg_destroy();
else
return true;
m_cinfo_initialized = false;
}
/*
* Do we have tile data already? Make sure we initialize the
* the state in decompressor mode if we have tile data, even if we
* are not in read-only file access mode.
*/
FieldValue[] result = m_tif.GetField(TiffTag.TILEBYTECOUNTS);
if (m_tif.IsTiled() && result != null)
{
byte_counts = result[0].ToIntArray();
if (byte_counts != null)
data_is_empty = byte_counts[0] == 0;
}
result = m_tif.GetField(TiffTag.STRIPBYTECOUNTS);
if (!m_tif.IsTiled() && result != null)
{
byte_counts = result[0].ToIntArray();
if (byte_counts != null)
data_is_empty = byte_counts[0] == 0;
}
if (force_decode)
decompress = true;
else if (force_encode)
decompress = false;
else if (m_tif.m_mode == Tiff.O_RDONLY)
decompress = true;
else if (data_is_empty)
decompress = false;
else
decompress = true;
// Initialize LibJpeg.Net
if (decompress)
{
if (!TIFFjpeg_create_decompress())
return false;
}
else
{
if (!TIFFjpeg_create_compress())
return false;
}
m_cinfo_initialized = true;
return true;
}