如何在Lazarus中以nef文件(尼康原始格式)检索嵌入式JPG的偏移量

时间:2017-12-11 08:43:37

标签: jpeg offset lazarus

早安,

用我的尼康数码单反相机,我总是拍摄原始照片。我想在导入文件夹中导入我的nef,然后使用名称复制它们,并以日期为前缀。在Lazarus我创建了一个名为TMyNef的类,我设法检索了日期,ISO,Shutterspeed,F-Stops,曝光程序,制造商,模型和焦距。我正在努力克服嵌入式JPG的偏移。我需要这个,因为Lazarus TImage组件不支持NEF格式,但它可以完美地显示JPG。每个NEF都有一个嵌入式JPG(你在相机背面看到),隐藏在NEF的PreviewTAG中。基本上,NEF几乎与TIFF相同。 Tiff使用IFD-s来存储元信息。所以,我研究了许多关于tiff,exif,Exiftool(Phil Harvey),DCRaw(Dave Coffin)的网站我使用Exiftool.exe来分析我的nef。我甚至在我的程序中调用了“Exiftool.exe -b”,但速度很慢。 不久,它归结为:

  1. 打开文件
  2. 阅读标题
  3. 搜索标签0x8769(EXIF标签)
  4. 如果没有找到 - >出口
  5. 转到EXIF-IFD启动的偏移量
  6. 搜索标签0x927C(制造商说明)
  7. 如果没有找到 - >出口
  8. 转到MAKERNOTES-IFD开始的偏移量
  9. 阅读Makernotes标题
  10. 搜索标签0x011,尼康预览IFD
  11. 如果没有找到 - >退出
  12. 转到尼康预览IFD
  13. 搜索标签0x201(嵌入式JPG的开始)和 标签0x202(嵌入式JPG的大小)
  14. 如果没有找到 - >出口
  15. 转到嵌入式jpg的开头。
  16. 从文件中读取JPGSIZE字节并将其复制到TMemorystream, 叫做Fms
  17. 执行Image1.Picture.LoadFromStream(Fms)
  18. 概括为: 打开nef,搜索标签x08769,搜索0x927C,搜索0x0011,搜索0x0201。

    “Goto”表示在这种情况下:将filepointer移动到给定的偏移量。

    不幸的是,我无法检索嵌入式JPG的偏移量。我的节目与Phil Harvey的“Exiftool”完全不同。 跳到“Phil的偏移”并读取到0xFFD9或读取标签0x202中给出的字节数,显示一个完美的图片,转到我的程序找到的偏移量并读取到0xFFD9,Lazarus说:不支持的图片格式。 在几个IFD中,我找到了我需要的元数据,所以我随身携带了它。

    有没有人知道在NEF中检索嵌入式JPG的正确偏移的方法?或者是否有其他方法通过Lazarus中的TImage组件显示NEF?

    先致谢谢,并致以诚挚的问候, 马丁 (英特尔I5,8Gb,Windows 10,加载尼康编解码器,Lazarus 1.8)

1 个答案:

答案 0 :(得分:0)

Exif结构中的偏移量通常相对于第一个Exif标记前面的TIFF标题的开头。对于jpeg和tiff文件都是如此,不确定NEF。