2014-06-19 2 views
0

12 비트 단색 카메라로 작업하고 있습니다. 그것은 8 비트를 할 수 있지만 특정 픽셀 주변의 계산을 위해 여분의 데이터 비트가 필요합니다. 그래서 나는 16 비트 그레이 스케일 TIFF 파일을 생성하는 카메라를 사용하고있다. (필자가 필요로하는 12 비트의 데이터를 얻는 유일한 방법이다.)16 비트 그레이 스케일 TIFF 파일의 픽셀 값 읽기 (처음 12 비트 만)

(업체 당) 각 픽셀의 내용은 다음과 같습니다 11111111 1111XXXX - 흰색 00000000 0000XXXX - X는 무작위 검은

(다시 제조 업체 당).

파일은 마지막 4 비트가 무작위 인 것처럼 보이지 않지만 주제가 아닌 다른 문제입니다.

내가하려는 것은 주어진 파일 (예 : X, Y)의 픽셀 값 (처음 12 비트)을 읽는 것입니다.

나는 온라인 보았다하지만 난 찾을 수있는 모두가 16 비트를 읽 프로젝트 ...

편집을했다 : 내가 직접 나에게 전체 16 비트에 대한 액세스를 제공하는 카메라의 버퍼를 읽을 수 있었다. 12 비트 숫자로 변환해야하는 UInt16으로 끝납니다.

답변

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 =/* 이미지에서 가져 오기 * /; ushort 픽셀 = (ushort) (pixelFromImage >> 4);' – OSborn

관련 문제