2012-03-28 68 views
1

我正在修改jpeg EXIF數據。有些數據需要被定義爲分數。 在這裏,我有兩個問題: 1)哪個是正確的分數「格式」?例如,當我有30000μs的曝光時間(「曝光時間」)並將其存儲爲30000/1000000時,EXIF瀏覽器會顯示錯誤的曝光。存儲爲「1/30」會返回正確的結果。所有分數都必須是「1/x」嗎?EXIF分數計算

2.)如何快速計算分數?我現在使用的方法(類似於[1]中的「Dec2Frac」)非常緩慢。

問候,

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

+0

不應該只使用libexif嗎? – 2012-03-28 07:41:53

+0

1. EXIF查看器對30000/1000000顯示什麼?我懷疑它顯示1/33或3/100,其中任何一個都是正確的。 1/30錯誤10%.... 2.計算分數的最簡單方法是分子(微秒* 1000000)和分母常數1000000,然後離開EXIF查看器的工作。 – Ben 2012-03-28 09:56:46

+0

但與libExif我必須將小數轉換爲分數以及。或者我忽視了什麼? – Hyndrix 2012-03-28 11:02:34

回答

0

這是我在C#用於計算爲EXIF GPS數據的一小部分的代碼。該方法返回兩個整數的數組 - 一個是分子和一個分母。

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}; 
     }