2014-06-19 97 views
0

我正在使用12位單色相機。它可以做8位,但我需要額外的數據位來進行某些像素的計算。所以我使用相機生成一個16位灰度TIFF文件(獲得我需要的12位數據的唯一方法)。讀取16位灰度TIFF文件的像素值(但只有前12位)

(按照製造商)的每個像素的內容是: 11111111 1111XXXX - 白色 00000000 0000XXXX - 黑

其中X是隨機的(再次根據製造商)。

該文件看起來好像最後4位是隨機的,但這是另一個問題(超出主題)。

我想要做的是打開該文件,讀取給定像素(比如X,Y)的像素值(前12位)。

我在網上看了,但所有我能找到的是項目,將讀取的所有16位...

編輯:我能夠直接讀取相機緩衝,給了我訪問整個16位。我最終得到了一個UInt16,我需要轉換成12位數字。

回答

2

無法直接從文件讀取字節的部分。你需要讀取你想要的每個像素,並擺脫最後4位。例如。

int i; // some pixel from the image int pixel = i >> 4; // pixel > 0 for white

這使用比特移位擺脫底面4位。

+0

謝謝..我的像素值是一種類型的UInt16。 PixelValue = NewValue >> 4不起作用。我不知道我錯過了什麼。 – user3617652

+0

根據http://stackoverflow.com/questions/3819593/c-sharp-bitwise-shift-on-ushort-uint16你只需要將偏移值轉換爲UInt16。 'ushort pixelFromImage =/* get from image * /; ushort pixel =(ushort)(pixelFromImage >> 4);' – OSborn