int main(int argc, const char *argv[]) { tiff_t *fp; TIFF_STATUS ret; tiff_off_t ifd_off; tiff_ifd_t *ifd; tiff_tag_t *subifd; int subifd_count = 0; int subifd_type = 0; uint32_t *subifds = NULL; int i; if (argc < 2) { printf("insufficient arguments.\n"); return -1; } ret = tiff_open(&fp, argv[1], "r"); if (ret != TIFF_OK) { printf("file could not be openened: %d\n", ret); return -1; } tiff_get_base_ifd_offset(fp, &ifd_off); do { tiff_read_ifd(fp, ifd_off, &ifd); display_ifd(fp, ifd); read_ifd(fp, ifd, TIFF_TAG_SUBIFD); read_ifd(fp, ifd, TIFF_TAG_EXIFIFD); tiff_get_next_ifd_offset(fp, ifd, &ifd_off); tiff_free_ifd(fp, ifd); } while (ifd_off != 0); tiff_close(fp); return 0; }
int jxr_read_image_container(jxr_container_t container, FILE*fd) { unsigned char buf[4]; size_t rc; uint32_t ifd_off; rc = fread(buf, 1, 4, fd); if (rc < 4) return JXR_EC_BADMAGIC; if (buf[0] != 0x49) return JXR_EC_BADMAGIC; if (buf[1] != 0x49) return JXR_EC_BADMAGIC; if (buf[2] != 0xbc) return JXR_EC_BADMAGIC; if (buf[3] > 0x01) return JXR_EC_BADMAGIC; /* Version. */ rc = fread(buf, 1, 4, fd); if (rc != 4) return JXR_EC_IO; ifd_off = (buf[3] << 24) + (buf[2]<<16) + (buf[1]<<8) + (buf[0]<<0); container->image_count = 0; while (ifd_off != 0) { uint32_t ifd_next; container->image_count += 1; container->table_cnt = (unsigned*)realloc(container->table_cnt, container->image_count * sizeof(unsigned)); container->table = (struct ifd_table**) realloc(container->table, container->image_count * sizeof(struct ifd_table*)); if (ifd_off & 0x1) return JXR_EC_IO; rc = fseek(fd, ifd_off, SEEK_SET); rc = read_ifd(container, fd, container->image_count-1, &ifd_next); if (rc < 0) return (int) rc; ifd_off = ifd_next; } return 0; }
void read_E1_header(FILE *fp, unsigned short size) { printf(" E1 Header\n"); /* * Exif Header */ char exif_hdr[6]; fread(exif_hdr, sizeof(exif_hdr), 1, fp); printf(" %c\n", exif_hdr[0]); /* * TIFF Header */ tiff_offset = ftell(fp); unsigned char tiff_hdr[8]; fread(tiff_hdr, sizeof(tiff_hdr), 1, fp); if (tiff_hdr[0] == 'M') { printf(" Motorola align\n"); } else if (tiff_hdr[0] == 'I') { printf(" Intel align\n"); } else { printf(" UNKNOWN align\n"); } unsigned int ifd_offset = (tiff_hdr[4]<<24) | (tiff_hdr[5]<<16) | (tiff_hdr[6]<<8) | (tiff_hdr[7]); printf(" IFD Offset = %d\n", ifd_offset); /* * IFD */ while (ifd_offset != 0) { ifd_offset = read_ifd(fp, ifd_offset + tiff_offset); } }