您好,如果想获取ICC信息的话,请使用下面的代码:
IccProfileExtended profile = new IccProfileExtended();
if (IccProfileExtended.ImageHasIccProfile(path, 1))
{
profile.ReadFromImage(path, 1);
}
获取之后,profile里面就是ICC的所有信息。
如果想获取色彩空间名称的话,请参考下面的代码:
// 获取ProfileDescription节点
IccUnknownTagType tyoe = (IccUnknownTagType)profile.GetTag(IccTag.ProfileDescriptionTag);
// 获取该节点的数据
byte[] asciiList = tyoe.Data;
// 创建AscII转码
ASCIIEncoding asciiEncoding = new ASCIIEncoding();
// 转换该节点的数据为String
string strCharacter = asciiEncoding.GetString(asciiList);
下面两个是转换后的结果,从开发环境中拷贝出来的,可以看到sRGB IEC61966-2.1和Adobe RGB (1998)
\0\0\0 sRGB IEC61966-2.1\0\0\0\0\0\0\0\0\0\0\0 sRGB IEC61966-2.1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
\0\0\0 Adobe RGB (1998)\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
规律是第四个byte开始就是文字内容,但实际上开头有个占位符,ASCII码是17或者18,您可以直接从第5位开始读取,就是完整的文字了。
以上,谢谢。 |