【发布时间】:2015-06-02 17:01:35
【问题描述】:
我在 github 上使用 seikichi 的名为 tiff.js 的 LibTIFF C 代码的编译 Emscripten 端口。在我的代码中,我需要获取一些 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)...等。
提前感谢您的想法
【问题讨论】:
-
无符号右移运算符。
标签: javascript tiff libtiff