2012-01-25 2 views
1

큰 이미지 섹션의 비트 맵 이미지를 생성하기 위해 LibTiff.Net을 사용하여 읽은 색인 된 Tiff 이미지가 있습니다. 나는 Tiff가 출력 비트 맵에서 사용되는 256 32 비트 픽셀 값으로 변환하려고하는 256 색 항목을 가질 것이라고 믿습니다.Tif 인덱싱 된 8 비트 색상을 32 비트 색상으로 변환

int bitsPerSample = tif.GetField(TiffTag.BITSPERSAMPLE)[0].ToInt(); 
FieldValue[] colourIndex = tif.GetField(TiffTag.COLORMAP); 
int[] palette = new int[256]; 
for(int i = 0; i < 256; i++) 
{ 
    short red = colourIndex[0].ToShortArray()[i]; 
    short green = colourIndex[1].ToShortArray()[i]; 
    short blue = colourIndex[2].ToShortArray()[i]; 

    palette[i] = ? 
} 

어떻게 RGB 단락을 32 비트 픽셀 값으로 변환합니까?

답변

1

시도 System.Drawing.Color.FromArgb(red, green, blue).ToArgb().

그러나 LibTiff와 Win32가 모두 ARGB 값에 대해 동일한 바이트 순서를 사용하는 경우에만 올바른 결과를 제공합니다. 또한 빨간색, 녹색 및 파란색 값이 0에서 255 사이의 값을 가진다고 가정합니다. 그렇지 않으면 확장 할 수 있습니다.

+0

우수, 감사합니다! 그게 효과가있는 것 같습니다. 색상 값은 0 ... 65536이므로 65535로 나눈 값과 255를 곱한 값은 예상 색상과 매우 다릅니다. – JWood

+0

-32768에서 32767까지 실행되는'short'를 사용하고 있습니다. libtiff가 전체 범위를 사용하는지 모르겠습니다. 어느 쪽이든 계산이 올바르지 않습니다. – arx

+0

죄송합니다, 지금 내가 ushort를 사용하고 있다고 언급 했어야합니다. 계산이 정확합니다. – JWood

0

TIFF ColorMap에서 각 색상의 값 수는 2 ** BitsPerSample입니다. 따라서 8 비트 팔레트 색상 이미지의 ColorMap 필드는 3 * 256 값을 갖습니다.

각 값의 너비는 16 비트입니다. 0은 최소 강도를 나타내고 65535는 최대 강도를 나타냅니다. 블랙 그래서, 당신은 아마 다음 코드를 사용해야 65535

를 0,0,0으로 표시, 65535, 65535에 의해 흰색된다

ushort red = colourIndex[0].ToShortArray()[i]; 
ushort green = colourIndex[1].ToShortArray()[i]; 
ushort blue = colourIndex[2].ToShortArray()[i]; 

palette[i] = System.Drawing.Color.FromArgb(red/255, green/255, blue/255).ToArgb(); 
관련 문제