如何在拉撒路中以Nef-File(Nikon Raw格式)中的嵌入式JPG检索偏移



goodmorning,

与我的尼康DSLR一起,我总是开枪。我想将我的nef在进口装置中导入,并用一个名称将其复制,并在所拍摄的日期之前。在Lazarus中,我创建了一个名为TMYNEF的类,我设法检索了所需的日期,ISO,ShuttersPeed,F-Spop,F-Spops,曝光程序,制造商,模型和焦距。我正在挣扎着嵌入式JPG的偏移。我之所以需要这个,是因为Lazarus Fimage-Component不支持Nef-Format,但它可以完美地显示JPG。每个NEF都有一个嵌入式JPG(您在相机的背面看到),隐藏在NEF的预览中。基本上,NEF与Tiff几乎相同。TIFF使用IFD-S来存储元信息。因此,我研究了很多有关TIFF,Exif,Exiftool(Phil Harvey),Dcraw(Dave Coffin)的网站,我使用Exiftool.exe分析了我的NEF。我什至在程序中称为" exiftool.exe -b",但这很慢。不久,它归结为:

  1. 打开文件
  2. 阅读标题
  3. 搜索标签0x8769(exif-tag)
  4. 如果找不到 ->退出
  5. 获得了exif-ifd启动的偏移
  6. 搜索标签0x927C(Makernotes)
  7. 如果找不到 ->退出
  8. 将Makernotes-ifd启动的位置偏移
  9. 阅读Makernotes标头
  10. 搜索标签0x011,尼康预览IFD
  11. 如果找不到 ->退出
  12. nikon预览IFD
  13. 搜索标签0x201(嵌入式JPG的开始)和标签0x202(嵌入式JPG的大小)
  14. 如果找不到 ->退出
  15. 获得了嵌入式JPG的开始。
  16. 从文件中读取jpgsize-bytes,然后将它们复制到tmemorystream,称为FMS
  17. 执行image1.picture.loadfromstream(FMS)

总结:打开nef,搜索标签x08769,搜索0x927c,搜索0x0011,搜索0x0201。

" goto"的意思是:将filepointer移至给定偏移量。

不幸的是,我无法检索嵌入式JPG的偏移。我的计划给出了与菲尔·哈维(Phil Harvey)的" Exiftool"完全不同的价值观。跳到" Phil的偏移量"并阅读直到0xFFD9或阅读TAG 0x202中给出的字节数量,显示为完美的图片,转到我的程序的偏移量,然后阅读直到0xffd9,Lazarus说:不支持的图片形式。在几个IFD中,我找到了所需的元数据,所以我随身携带。

有人知道一种方法可以检索NEF中嵌入式JPG的正确偏移吗?还是通过Lazarus中的Timage-Component显示NEF的另一种方法?

提前感谢,并给予最好的问候马丁(英特尔i5,8GB,Windows 10,Nikon编解码器,Lazarus 1.8)

exif结构内的偏移通常相对于第一个Exif标签前面的TIFF标头的开头。对于JPEG和TIFF文件是正确的,不确定NEF。

最新更新