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",但这很慢。不久,它归结为:
- 打开文件
- 阅读标题
- 搜索标签0x8769(exif-tag)
- 如果找不到 ->退出
- 获得了exif-ifd启动的偏移
- 搜索标签0x927C(Makernotes)
- 如果找不到 ->退出
- 将Makernotes-ifd启动的位置偏移
- 阅读Makernotes标头
- 搜索标签0x011,尼康预览IFD
- 如果找不到 ->退出
- nikon预览IFD
- 搜索标签0x201(嵌入式JPG的开始)和标签0x202(嵌入式JPG的大小)
- 如果找不到 ->退出
- 获得了嵌入式JPG的开始。
- 从文件中读取jpgsize-bytes,然后将它们复制到tmemorystream,称为FMS
- 执行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。