我正在使用seikichi在github上发布的tiff.js,这是LibTIFF C代码的编译版本。在我的代码中,我需要获取一些TIFF标签。在tiff.js中,您可以调用tiff.getField(tag value)方法。我特别需要的一个标签是ROWSPERSTRIP,其值为278,因此我按如下方式调用:
var rps = tiff.getField(278); //return rows per strip tiff tag
这似乎对一些较小的值1到176(还不确定?)可以正常工作,但我有几个文件,AsTiffTagViewer报告每个条带有224行,以及一个具有746行每个条带的文件。然而,tiff.js错误地将这两个值都报告为6和1。我正在使用tiff.js调试器,注意到它来到了一个具有以下代码的位置:
do{if(b>>>0<=65535){d=e[j+24>>1]|0;if((1<<(d&31)&c[a+40+(d>>>5<<2)>>2)]|0)==0){k=0}else{break}i=f;return k|0}}while(0);
这段代码看起来很丑,这可能是Emscripten将C代码转换后的最佳结果。现在我知道">>"和"<<"是什么意思,但似乎找不到关于">>>"的信息。我还不确定是否是tiff.js中的这段代码导致tiff.getField(278)不能正确返回一些更大的行每条带值(目前只知道它似乎能正确返回较小的行每条带值而无法正确返回较大的)。所以我的主要问题是">>>"是什么意思,我的第二个问题是有没有人有任何关于为什么tiff.getField(278)对于较大的值可能无法正常工作的想法。注意:大多数其他基本的TIFF标签确实返回正确的值,例如tiff.getField(PHOTOMETRIC)和tiff.getField(SAMPLESPERPIXLE)等等。
提前感谢你们的想法。