我有一个索引的Tiff图像,我正在使用LibTiff.Net来生成大图像的一部分的位图图像。我相信Tiff将有256个颜色条目,我想将其转换为256个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位像素值?
答案 0 :(得分:1)
尝试System.Drawing.Color.FromArgb(red, green, blue).ToArgb()
。
但是,如果LibTiff和Win32对其ARGB值使用相同的字节顺序,这只会给出正确的结果。它还假设您的红色,绿色和蓝色值在0到255之间;你可以扩展它们。
答案 1 :(得分:0)
在TIFF ColorMap中,每种颜色的值数为2 ** BitsPerSample。因此,8位调色板颜色图像的ColorMap字段将具有3 * 256个值。
每个值的宽度为16位。 0表示最小强度,65535表示最大强度。黑色表示为0,0,0,白色表示为65535,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();