2011-08-15 70 views
10

我想用LibTIFF編寫10,12位RGB TIFF文件。用LibTIFF C++編寫10,12位TIFF文件

像素數據是在unsigned short緩衝液(16位)保存在本地

1)如果我設置TIFFTAG_BITSPERSAMPLE至10或12,沒有足夠的比特被從緩衝器中讀出,並輸出不正確。 (據我所知,它只是讀取每個組件10或12位,而不是16,這是問題)

2)我試着打包緩衝區中的位,以便它真的是12-R,12- G,12-B。在這種情況下,我認爲該文件正在被正確寫入,但沒有找到可以正確顯示該圖像的查看器。 3)如果我將TIFFTAG_BITSPERSAMPLE設置爲16,觀衆可以顯示TIFF圖像,但是我有一個問題,我不知道圖像最初是10位還是12位(如果我想稍後閱讀它的libtiff)。另外,觀看者期望動態範圍是16位而不是10或12,也導致錯誤的觀點。

4)最煩人的部分是,我無法在網上找到一個10,12或14位TIFF圖像,看看標題應該是什麼樣子。

因此最後,將10或12位圖像數據寫入TIFF文件的正確方法是什麼?

+0

前段時間我問過同樣的問題,沒有結果,它看起來像tiff格式沒有這樣的標籤。我希望我錯了... –

回答

8

The TIFF specification沒有指定在圖像中存儲每個通道10,12或14位的方式。根據編碼器和解碼器的不同,可能仍然可以處理這些圖像,但它實際上是一個實現細節,因爲它們不需要這樣做。

如果你想在TIFF中有8位以上的精度,你唯一的選擇是16位(或浮點數,但這是一個不同的故事)。

我不知道任何圖像格式具體支持這些bitdepths,所以如果您必須存儲具有該特定bitdepth的圖像,觀衆可能會成爲一個問題。我能想到的最簡單的解決方法是將每個像素存儲爲16位,並將原始位深度作爲元數據(例如,放在ImageDescription標籤中),但這一切取決於圖像將用於什麼以及爲什麼需要此信息。

+0

其實我也會推薦這個作爲解決方案,因爲異國情調的深度會給你什麼都不好。 –

+0

我使用了每個採樣16位並將實際的bitdepth編碼爲元數據。謝謝 – Itsik