/* * Setup a default directory structure. */ private void setupDefaultDirectory() { int tiffFieldInfoCount; TiffFieldInfo[] tiffFieldInfo = getFieldInfo(out tiffFieldInfoCount); setupFieldInfo(tiffFieldInfo, tiffFieldInfoCount); m_dir = new TiffDirectory(); m_postDecodeMethod = PostDecodeMethodType.pdmNone; m_foundfield = null; m_tagmethods = m_defaultTagMethods; /* * Give client code a chance to install their own * tag extensions & methods, prior to compression overloads. */ if (m_extender != null) m_extender(this); SetField(TiffTag.Compression, Compression.None); /* * NB: The directory is marked dirty as a result of setting * up the default compression scheme. However, this really * isn't correct -- we want DirtyDirect to be set only * if the user does something. We could just do the setup * by hand, but it seems better to use the normal mechanism * (i.e. SetField). */ m_flags &= ~TiffFlags.DirtyDirect; /* * we clear the IsTiled flag when setting up a new directory. * Should we also be clearing stuff like InSubIFD? */ m_flags &= ~TiffFlags.IsTiled; /* * Clear other directory-specific fields. */ m_tilesize = -1; m_scanlinesize = -1; }
/// <summary> /// Sets the new tag methods to use. /// </summary> /// <param name="methods">Tag methods.</param> /// <returns>The previously used tag methods.</returns> public TiffTagMethods SetTagMethods(TiffTagMethods methods) { TiffTagMethods prevTagMethods = m_tagmethods; if (methods != null) m_tagmethods = methods; return prevTagMethods; }
public OJpegCodec(Tiff tif, Compression scheme, string name) : base(tif, scheme, name) { m_tagMethods = new OJpegCodecTagMethods(); }
public override bool Init() { Debug.Assert(m_scheme == Compression.OJPEG); /* * Merge codec-specific tag information. */ m_tif.MergeFieldInfo(ojpeg_field_info, ojpeg_field_info.Length); m_jpeg_proc = 1; m_subsampling_hor = 2; m_subsampling_ver = 2; m_tif.SetField(TiffTag.YCBCRSUBSAMPLING, 2, 2); /* tif tag methods */ m_parentTagMethods = m_tif.m_tagmethods; m_tif.m_tagmethods = m_tagMethods; /* Some OJPEG files don't have strip or tile offsets or bytecounts * tags. Some others do, but have totally meaningless or corrupt * values in these tags. In these cases, the JpegInterchangeFormat * stream is reliable. In any case, this decoder reads the * compressed data itself, from the most reliable locations, and * we need to notify encapsulating LibTiff not to read raw strips * or tiles for us. */ m_tif.m_flags |= TiffFlags.NoReadRaw; return true; }
public override bool Init() { Debug.Assert(m_scheme == Compression.JPEG); /* * Merge codec-specific tag information and override parent get/set * field methods. */ m_tif.MergeFieldInfo(jpegFieldInfo, jpegFieldInfo.Length); /* * Allocate state block so tag methods have storage to record values. */ m_compression = null; m_decompression = null; m_photometric = 0; m_h_sampling = 0; m_v_sampling = 0; m_bytesperline = 0; m_scancount = 0; m_samplesperclump = 0; m_recvtime = 0; m_parentTagMethods = m_tif.m_tagmethods; m_tif.m_tagmethods = m_tagMethods; /* Default values for codec-specific fields */ m_jpegtables = null; m_jpegtables_length = 0; m_jpegquality = 75; /* Default IJG quality */ m_jpegcolormode = JpegColorMode.RGB; m_jpegtablesmode = JpegTablesMode.Quant | JpegTablesMode.Huff; m_recvparams = 0; m_subaddress = null; m_faxdcs = null; m_ycbcrsampling_fetched = false; m_rawDecode = false; m_rawEncode = false; m_tif.m_flags |= TiffFlags.NoBitRev; // no bit reversal, please m_cinfo_initialized = false; /* ** Create a JPEGTables field if no directory has yet been created. ** We do this just to ensure that sufficient space is reserved for ** the JPEGTables field. It will be properly created the right ** size later. */ if (m_tif.m_diroff == 0) { const int SIZE_OF_JPEGTABLES = 2000; // The following line assumes incorrectly that all JPEG-in-TIFF // files will have a JpegTables tag generated and causes // null-filled JpegTables tags to be written when the JPEG data // is placed with WriteRawStrip. The field bit should be // set, anyway, later when actual JpegTables header is // generated, so removing it here hopefully is harmless. // // m_tif.setFieldBit(FIELD_JPEGTABLES); // m_jpegtables_length = SIZE_OF_JPEGTABLES; m_jpegtables = new byte[m_jpegtables_length]; } /* * Mark the YCBCRSAMPLES as present even if it is not * see: JPEGFixupTestSubsampling(). */ m_tif.setFieldBit(FieldBit.YCbCrSubsampling); return true; }
// tagMethods can be null public void TIFFPredictorInit(TiffTagMethods tagMethods) { // Merge codec-specific tag information and override parent get/set field methods. m_tif.MergeFieldInfo(m_predictFieldInfo, m_predictFieldInfo.Length); m_childTagMethods = tagMethods; m_parentTagMethods = m_tif.m_tagmethods; m_tif.m_tagmethods = m_tagMethods; m_predictor = PredictionScheme.None; // default value m_predictorType = PredictorType.ptNone; // no predictor method }
public CodecWithPredictor(Tiff tif, Compression scheme, string name) : base(tif, scheme, name) { m_tagMethods = new CodecWithPredictorTagMethods(); }
private void InitCCITTFax3() { /* * Merge codec-specific tag information and * override parent get/set field methods. */ m_tif.MergeFieldInfo(m_faxFieldInfo, m_faxFieldInfo.Length); /* * Allocate state block so tag methods have storage to record values. */ m_rw_mode = m_tif.m_mode; m_parentTagMethods = m_tif.m_tagmethods; m_tif.m_tagmethods = m_tagMethods; m_groupoptions = 0; m_recvparams = 0; m_subaddress = null; m_faxdcs = null; if (m_rw_mode == Tiff.O_RDONLY) { // FIXME: improve for in place update m_tif.m_flags |= TiffFlags.NoBitRev; // decoder does bit reversal } m_runs = null; m_tif.SetField(TiffTag.FAXFILLFUNC, new Tiff.FaxFillFunc(fax3FillRuns)); m_refline = null; m_decoder = Decoder.useFax3_1DDecoder; m_encodingFax4 = false; }
private Tiff() { m_clientdata = 0; m_postDecodeMethod = PostDecodeMethodType.pdmNone; setupBuiltInCodecs(); m_defaultTagMethods = new TiffTagMethods(); m_defaultErrorHandler = null; if (m_errorHandler == null) { // user did not setup custom handler. // install default m_defaultErrorHandler = new TiffErrorHandler(); m_errorHandler = m_defaultErrorHandler; } }