对DExif-Package中某些字段的Compliererror

时间:2017-11-17 23:55:56

标签: pascal exif lazarus

我安装了包DEXIF并能够读取一些EXIF条目。但不是文档中描述的计算值。 以下代码显示了什么有效。对于注释行我得到错误:标识符idents没有成员“focalLenght”等等.. 我怎样才能掌握这些以及更多领域?

procedure TForm1.EXIFAnzeigen(filename: string);
var
  ImgData: TImgData;
  i :integer;
begin
  //EDitor leeren

  ValueListEditor1.Strings.Clear;
  if FileExists(filename) then begin
     ImgData:= TImgData.Create();
     ImgData.Tracelevel :=1;
     try
        if uppercase(ExtractFileExt(filename)) = '.JPG' then begin
           if ImgData.ProcessFile(filename) then begin
              if ImgData.HasEXIF then begin
                 ValueListEditor1.InsertRow('Camera Make',
                 ImgData.ExifObj.CameraMake,True);
                 ValueListEditor1.InsertRow('Camera Modell',
                 ImgData.ExifObj.CameraModel,True);
                 ValueListEditor1.InsertRow('Picture DateTime',
                 FormatDateTime(ISO_DATETIME_FORMAT, ImgData.ExifObj.GetImgDateTime),True);
                 ValueListEditor1.InsertRow('Width',
                 inttostr(ImgData.ExifObj.Width),True);
                 ValueListEditor1.InsertRow('FlashUsed',
                 intToStr(ImgData.ExifObj.FlashUsed),True);

//               ValueListEditor1.InsertRow('FocalLength',
//               inttostr(ImgData.ExifObj.FocalLength),True);
//               ValueListEditor1.InsertRow('ApertureFNumber',
//               ImgData.ExifObj.ApertureFNumber,True);
//               ValueListEditor1.InsertRow('ExposureTime',
//               ImgData.ExifObj.ExposureTime,True);
//               ValueListEditor1.InsertRow('Distance',
//               ImgData.ExifObj.Distance,True);
//               ValueListEditor1.InsertRow('Process',
//               ImgData.ExifObj.Process,True);
              end else begin
                  ValueListEditor1.InsertRow('No EXIF','No Data',True);
              end;
           end else begin
               ValueListEditor1.InsertRow('No EXIF','Processdata',True);
           end;
        end else begin
          ValueListEditor1.Strings.Clear;
        end;
    finally
      ImgData.Free;
    end;
  end;
end;

1 个答案:

答案 0 :(得分:2)

documentation说:

  

一些更常见的字段可以作为属性访问   ImgData的EXIFObj。

并显示了读取这些属性的示例,部分与您使用代码读取的成功相同。

但是FocalLength以及代码中失败的其他代码必须以文档说明的其他方式访问:

  

可以使用TagValue属性读取其他EXIF字段   指定EXIF属性的名称

以下示例澄清:

ValueListEditor1.InsertRow('FocalLength',
inttostr(ImgData.ExifObj.TagValue['FocalLength']),True);