找回密码
 立即注册

QQ登录

只需一步,快速开始

jerachen

高级会员

4

主题

8

帖子

1386

积分

高级会员

积分
1386

活字格认证元老葡萄

最新发帖
jerachen
高级会员   /  发表于:2015-7-12 02:56  /   查看:4236  /  回复:2
如何检测Jpg所使用的Icc名称
如 AdobeRGB1998、 sRGB IEC61966-2.1或者其他。

2 个回复

倒序浏览
AvoCaDolol活字格认证 Wyn认证
社区贡献组   /  发表于:2015-7-13 13:42:00
沙发
您好,您的问题已经收到,我这边调查之后给您回复。
回复 使用道具 举报
AvoCaDolol活字格认证 Wyn认证
社区贡献组   /  发表于:2015-7-15 09:14:00
板凳
您好,如果想获取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位开始读取,就是完整的文字了。

以上,谢谢。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部