2012-03-28 8 views
1

jpeg EXIFデータを変更しています。一部のデータは分数として定義する必要があります。 ここでは、私は2つの問題があります: 1.)どちらが正しい小数 "フォーマット"ですか?たとえば、露光時間(ExposureTime)が30000μsで30000/1000000として保存している場合、EXIFビューアは間違った露出を示します。 「1/30」として保存すると正しい結果が返されます。すべての分数は「1/x」でなければなりませんか?EXIF分数計算

2.)どのようにして分数を高速に計算できますか?私が今使っている方法([1]の "Dec2Frac"に似ています)は非常に遅いです。

よろしく、

[1] Calculating EXIF exposure time as a fraction (Delphi)

+0

libexifを使用しないでください。 –

+0

1. EXIFビューアは30000/1000000で何を表示しますか?私は1/33、3/100のいずれかが正しいと思われます。 1/30は10%で間違っています.... 2.分数を計算する最も簡単な方法は、分子の場合はマイクロ秒(1000000)、分母の場合は1000000です。次にEXIFビューアの作業を終了します。 – Ben

+0

しかし、libExifでは小数点以下を小数点に変換する必要があります。それとも私は何か見落としたことがありますか? – Hyndrix

答えて

0

これは私がEXIF GPSデータの割合を算出するためのC#で使用しているコードです。このメソッドは、2つの整数の配列を返します.1つは分子であり、もう1つは分母です。

public static int[] GetFraction(Decimal value) 
     { 
      int denominator = 1; 
      int numeratorMultiplier = 1; 
      Decimal numerator = value * numeratorMultiplier; 
      int failSafe = 0; 

      while (Decimal.Remainder(numerator, 1m) != 0m && failSafe < 20 && ((long)numerator * 10) < Int32.MaxValue) 
      { 
       denominator *= 10; 
       numeratorMultiplier *= 10; 

       numerator = value * numeratorMultiplier; 
       failSafe++; 
      } 

      return new int[] {Decimal.ToInt32(numerator), denominator}; 
     }