示例#1
0
 bool isTiffType(BasicIo& iIo, bool advance)
 {
     const int32_t len = 8;
     byte buf[len];
     iIo.read(buf, len);
     if (iIo.error() || iIo.eof()) {
         return false;
     }
     TiffHeade2 tiffHeader;
     bool rc = tiffHeader.read(buf, len);
     if (!advance || !rc) {
         iIo.seek(-len, BasicIo::cur);
     }
     return rc;
 }
示例#2
0
    bool Nikon3MnHeader::read(const byte* pData,
                              uint32_t    size,
                              ByteOrder   /*byteOrder*/)
    {
        assert (pData != 0);

        if (size < size_) return false;
        if (0 != memcmp(pData, signature_, 6)) return false;
        buf_.alloc(size_);
        std::memcpy(buf_.pData_, pData, buf_.size_);
        TiffHeade2 th;
        if (!th.read(buf_.pData_ + 10, 8)) return false;
        byteOrder_ = th.byteOrder();
        start_ = 10 + th.offset();
        return true;

    } // Nikon3MnHeader::read
示例#3
0
 TiffComponent* newNikonMn(uint16_t    tag,
                           uint16_t    group,
                           uint16_t    /*mnGroup*/,
                           const byte* pData,
                           uint32_t    size,
                           ByteOrder   /*byteOrder*/)
 {
     // If there is no "Nikon" string it must be Nikon1 format
     if (size < 6 ||    std::string(reinterpret_cast<const char*>(pData), 6)
                     != std::string("Nikon\0", 6)) {
         return new TiffIfdMakernote(tag, group, Group::nikon1mn, 0);
     }
     // If the "Nikon" string is not followed by a TIFF header, we assume
     // Nikon2 format
     TiffHeade2 tiffHeader;
     if (   size < 18
         || !tiffHeader.read(pData + 10, size - 10)
         || tiffHeader.tag() != 0x002a) {
         return new TiffIfdMakernote(tag, group, Group::nikon2mn, new Nikon2MnHeader);
     }
     // Else we have a Nikon3 makernote
     return new TiffIfdMakernote(tag, group, Group::nikon3mn, new Nikon3MnHeader);
 }