2017-11-17 10 views
-3

DEXIFパッケージがインストールされていて、EXIF-Entriesを読み取ることができます。ただし、ドキュメントに記載されている計算値ではありません。 次のコードは、動作するコードを示しています。コメントされた行について、私はエラー:識別子identsには「focalLenght」というメンバーはありません。 これらのフィールドとそれ以上のフィールドをどのように保持できますか?DExif-Packageの特定のフィールドに準拠しています

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; 
+0

あなたがしようとしました文書が言うように

しかしFocalLength、そしてあなたのコードで失敗などは、別の方法でアクセスする必要がありますソースコードを読んで、どのようなプロパティが利用可能か、どのような場合にどのように使用できるかを確認します。 –

+0

コードを検索しましたが、どこでも「FocalLenght」は見つかりませんでした。ドキュメントを読むだけです。 – ratmalwer

+0

さて、FocalLenghtではなく、FocalLengthです。あなたの投稿と最後のコメントの両方であなたが綴った方法でそれを探しているなら、あなたはそれを見つけられません。あなたがあなたの検索のためにそれを正しく綴り、それを見つけられないなら、そこにはありません。 –

答えて

2

documentationは言う:

Some of the more common fields are accessible as properties of the EXIFObj of the ImgData.

とあなたのコードを読むために成功すると、部分的に同じこれらのプロパティを読み取る例を示します。

Other EXIF field can be read by using the property TagValue and specifying the name of the EXIF property

次の例では、明確に:

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

ありがとうございました!私はこのアプローチでいくつかのタグにアクセスすることができます。しかし、私はいくつかのタグ名が存在するとは見当たりませんので、もっと深くする必要があります。ネット上でこのリストを見つけました:http://www.exiv2.org/tags.htmlしかし、名前がDEXIFとその結果に対応するかどうかを確認する必要があります。 – ratmalwer

+0

言うまでもなく、 'dEXIF'の名前をよく守り、必要に応じて新しい名前を追加してください。それはまったく別の話題です。 ImgData.ExifObj.TagValue ['FocalLength'] <> null then'のように、エラーを避けるために、各項目の前にチェックを追加してください。 –

+0

DEXIFに名前を追加することをお勧めします。私はそれをよりよく理解する。良い週末を !!! – ratmalwer

関連する問題