![](/img/trans.png)
[英]System.Drawing and System.Drawing.Imaging alternatives for Windows Phone
[英]Reading exif data with .net framework (System.Drawing.Imaging)
我正在使用.net框架從jpg文件讀取exif元數據。 問題是如何以可讀形式(例如字符串)轉換PropertyItem.Value(即字節數組)。
例如,使用此代碼,我讀取了圖片的GPSAltitude值:
var pic = System.Drawing.Image.FromFile(@"c:\mypic.jpg");
var GPSAltitude = pic.GetPropertyItem(6);
GPSAltitude.Value是一個字節數組,如下所示:{75,2,0,0,1,0,0,0}。
我知道海拔是587 msl ..但是我如何從該字節數組轉到587?
我嘗試使用ASCIIencoding和其他一些編碼來讀取它,但得到的內容類似於“ K \\ 0 \\ 0 \\ 0 \\ 0 \\ 0”。
任何想法 ? 謝謝
除了已經給出的答案之外,您可能還需要查看實際的Exif規范 。
GPSAltitude (第47頁)
根據GPSAltitudeRef中的參考值指示海拔高度。 高度表示為一個RATIONAL值。 參考單位是米。
GPSAltitudeRef (第47頁)
指示用作參考高度的高度。 如果參考為海平面且海拔高於海平面,則給出0。 如果海拔高度低於海平面,則給出的值為1,並且海拔高度在GPSAltitude標簽中表示為絕對值。 參考單位是米。 請注意,此標簽是BYTE類型,與其他參考標簽不同。
有理 (第14頁)
兩個長。 第一個LONG是分子,第二個LONG表示分母。
長 (頁14)
一個32位(4字節)無符號整數。
因此, {75, 2, 0, 0, 1, 0, 0, 0}
是{75, 2, 0, 0} / {1, 0, 0, 0}
。 當您將字節讀取為小尾數位時,將得到0000 0010 0100 1011 / 0000 0000 0000 0001
,其計算結果為587。其他答案說明了如何獲得答案,但希望這可以解釋為什么會這樣。
可能BitConverter可以工作。
public static void Main()
{
byte[] bytes = {75, 2, 0, 0, 1, 0, 0, 0};
int result = BitConverter.ToInt32(bytes, 0);
Console.WriteLine("Returned value: {0}", result);
Console.ReadLine();
}
結果是:587
只需將byte[]
轉換為一個int
即可查看所需的587值:
var pic = System.Drawing.Image.FromFile(@"c:\mypic.jpg");
var GPSAltitude = pic.GetPropertyItem(6);
var altitude = System.BitConverter.ToInt32(GPSAltitude,0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.