public override object ReadValue()
 {
     if (this.Context.ValueCountLeft == 0)
     {
         this.FireEvent(ValueState.ToNextTag);
         return(null);
     }
     this.Context.ValueCountLeft--;
     return(Helper.Read(this.Context.Reader.BaseStream, TiffDataTypeHelper.Typeof(this.Context.CurrentTag.type)));
 }
            public static Tiff.IfdEntry FromPtr(IntPtr ptr, IntPtr baseAddr)
            {
                TiffDirEntry _entry = (TiffDirEntry)Marshal.PtrToStructure(ptr, typeof(TiffDirEntry));

                Tiff.IfdEntry _ifdEntry = new Tiff.IfdEntry {
                    Tag      = _entry.tag,
                    DataType = _entry.type,
                    _data    = Array.CreateInstance(TiffDataTypeHelper.Typeof(_entry.type), _entry.count <= int.MaxValue?_entry.count:0)
                };

                IntPtr _dataPtr = (IntPtr)(((_ifdEntry.DataSize = (int)(TiffDataTypeHelper.Sizeof(_entry.type) * _ifdEntry._data.Length)) > 4)?baseAddr.ToInt64() + _entry.offset:ptr.ToInt64() + 8);

                _ifdEntry.DataOffset = (int)(_dataPtr.ToInt64() - baseAddr.ToInt64());
                for (int i = 0, _size = TiffDataTypeHelper.Sizeof(_entry.type); i < _ifdEntry._data.Length; i++)
                {
                    _ifdEntry._data.SetValue(Marshal.PtrToStructure((IntPtr)(_dataPtr.ToInt64() + _size * i), TiffDataTypeHelper.Typeof(_entry.type)), i);
                }

                return(_ifdEntry);
            }