1
我想要讀取tiff文件中的自定義標籤。如何閱讀自定義TIFF標籤(不帶TIFFFieldInfo)
關於這個主題的指令很少,但是AFAIK他們使用一個名爲TIFFFieldInfo的接口(結構體)。我已經閱讀了documentation,並再次出現了TIFFFieldInfo。 我可以用它,但他們(the library)說,該接口是OBSOLETED。你能建議我合理的選擇嗎? 或者我只是誤解了頭文件?
我想要讀取tiff文件中的自定義標籤。如何閱讀自定義TIFF標籤(不帶TIFFFieldInfo)
關於這個主題的指令很少,但是AFAIK他們使用一個名爲TIFFFieldInfo的接口(結構體)。我已經閱讀了documentation,並再次出現了TIFFFieldInfo。 我可以用它,但他們(the library)說,該接口是OBSOLETED。你能建議我合理的選擇嗎? 或者我只是誤解了頭文件?
最後我找到了解決方案。 說明書(TIFFGetField(3tiff))說明了我們所需要的一切。參見AUTOREGISTERED TAGS會話。以下是複製粘貼的一個。
AUTOREGISTERED標籤。如果你不能找到在 上表中的標記,則意味着這是一個不受支持的標籤,而不是直接的libtiff(3TIFF)庫支持 。如果您知道該標籤的數據類型,您仍然可以閱讀 它的值。例如,如果您 想從 讀取標籤33424和ASCII字符串的LONG值,可以使用下面的代碼標籤36867:
uint32 count; void *data; TIFFGetField(tiff, 33424, &count, &data); printf("Tag %d: %d, count %d0", 33424, *(uint32 *)data, count); TIFFGetField(tiff, 36867, &count, &data); printf("Tag %d: %s, count %d0", 36867, (char *)data, count);
例如,我需要閱讀標籤,它是雙層,所以我用下面的代碼(但我沒有檢查):
tiff *tif = TIFFOpen("ex_file.tif", "rc"); // read tif
static ttag_t const TIFFTAG_SOMETAG = 34362; // some custom tag
if(tif != nullptr) // if the file is open
{
uint count; // get count
double *data; // get data
if(TIFFGetField(tif, TIFFTAG_SOMETAG, &count, &data) == 1) // read tag
throw std::logic_error("the tag does not exist.");
// print the values (caution: count is in bytes)
for(int index = 0; index < count/sizeof(double); ++index)
std::cout << data[index];
TIFFClose(tif); // close the file
}
else
throw std::runtime_error("cannot open the file");
如果你不能找到任何UPTODATE庫,從頭開始編寫一個TIFF信息的讀者是不是很難;該文件非常簡單。 (我是在一年前製作的;我會看看我能否找到源代碼,但現在可能已經過時了。) –