
我有一个索引的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位像素值?
注册热键
我怎样才能让一个ListVIEw的列自动resize编程?
为什么微软不像C ++那样提供像windows.h这样的最原生的函数和结构的静态Win32类?
Process.GetCurrentProcess()。MainWindowHandle返回零
无法卸载MysqL连接器。净6.9.3,在MysqL.Web.v20.dll失败
尝试System.Drawing.color.FromArgb(red,green,blue).ToArgb() 。
但是,如果libTiff和Win32都为它们的ARGB值使用相同的字节排序,这只会给出正确的结果。 它也假定你的红色,绿色和蓝色的值在0到255的范围内; 如果没有,你可以缩放它们。
在TIFF colorMap中,每种颜色的值数是2 ** BitsPerSample。 因此,8位调色板彩色图像的colorMap字段将有3 * 256个值。
每个值的宽度是16位。 0代表最小强度,65535代表最大强度。 黑色代表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();
总结以上是内存溢出为你收集整理的将Tif索引的8位颜色转换为32位颜色全部内容,希望文章能够帮你解决将Tif索引的8位颜色转换为32位颜色所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)