Как читать заголовки файлов TIFF в c?

Как я могу прочитать заголовок файла tiff в c?

на самом деле я хочу узнать TIFF Tag ImageWidth и TIFF Tag ImageLength.

как я могу получить эти атрибуты?

http://www.awaresystems.be/imaging/tiff/tifftags/imagewidth.html http://www.awaresystems.be/imaging/tiff/tifftags/imagelength.html

c перевод этого кода может помочь мне:

https://stackoverflow.com/a/9071933/2079158

я не знаю, хорошо,
попробовал что-то вроде этого:

#include "stdio.h" #include "stdlib.h" main() { FILE* f = fopen("tifo.tif", "rb"); unsigned char info[500]; fread(info, sizeof(unsigned char), 500, f); long int width = *(long int*)&info[256]; short int height = *(short int*)&info[257]; printf("width : %d \n", width); printf("height : %d \n", height); fclose(f); } 

что я могу сделать для tiff-файлов?

Вы неправильно интерпретируете «идентификаторы тегов» (256 и 257) в качестве индексов, которые не будут работать.

Вам необходимо найти требуемые идентификаторы в файле, а затем извлечь значение, связанное с каждым идентификатором.

Обратите внимание, что TIFF не имеет «заголовка», который содержит всю информацию, вам нужно будет найти файл, чтобы найти, что вам нужно.

Ваш код пытается прочитать заголовок с смещениями. Это не так, как работает TIFF. Он имеет короткий заголовок, который идентифицирует, где начинается «каталог файлов изображений» (IFD). IFD содержит одну или несколько записей, каждая из которых имеет TAG, объясняющую, каков ее контент, тип поля, счетчик и смещение к самому значению.

Чтобы найти размер изображения, вам нужно отсканировать соответствующие ИФД для тега, который имеет значение 256 и 257 соответственно.

Это объясняется более подробно здесь: http://partners.adobe.com/public/developer/tiff/index.html#spec

Я бы посоветовал вам взглянуть на библиотеку изображений, совместимую с tiff, tho ‘, так как довольно быстро становится довольно легко читать TIFF-файл – у них есть всевозможные сжатые форматы и т. Д., Что делает его довольно много работы для реализации полный читатель для TIFF.

Я решаю th probelm с этим кодом:

 #include  #include "tiffio.h" #include  #include  int main(void) { DIR *dp; struct dirent *ep; uint32 w, h; float xdpi,ydpi; dp = opendir ("./"); char file_name[30]; char last[30]; if (dp != NULL) { while (ep = readdir (dp)) { if( ( strstr(ep->d_name, ".tif") != NULL ) || ( strstr(ep->d_name, ".TIF") != NULL ) ) { TIFF* tif = TIFFOpen(ep->d_name, "r"); TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); TIFFGetField(tif, TIFFTAG_XRESOLUTION, &xdpi); TIFFGetField(tif, TIFFTAG_YRESOLUTION, &ydpi); printf("%s --> %dx %d | %.f - %.f \n",ep->d_name, w, h, xdpi,ydpi); strncpy ( file_name, ep->d_name, ep->d_namlen-4 ); file_name[ep->d_namlen-4]='\0'; sprintf(last,"%s (%.fx %.f).tif", file_name, (float) ((w/xdpi)*2.54) , (float) ((h/ydpi)*2.54) ); printf(" |__ %s\n\n",last); TIFFClose(tif); rename(ep->d_name, last); } } (void) closedir (dp); } else perror ("Directory can not open!"); printf("Succesfully finished!"); getchar(); return 0; }