我使用.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英里。但是如何从字节数组转到587呢?
我试着用ASCIIencoding和其他一些编码来读取它,但是我得到了类似于"K\0\0\0\0\0“的东西。
有什么想法吗?谢谢
发布于 2012-06-21 21:09:16
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
发布于 2012-06-21 21:32:14
除了已经给出的答案之外,您可能还想查看实际的Exif spec。
GPSAltitude (第47页)
指示基于GPSAltitudeRef中的参考的高度。高度表示为一个有理值。参考单位是米。
GPSAltitudeRef (第47页)
指示用作参考高度的高度。如果参考为海平面,且高度高于海平面,则为0。如果海拔低于海平面,则会给出值1,并在GPSAltitude标记中将海拔指示为绝对值。参考单位是米。请注意,与其他引用标记不同,此标记为BYTE类型。
RATIONAL (第14页)
两个长的。第一个LONG是分子,第二个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。其他答案解释了如何获得答案,但希望这解释了为什么会这样。
发布于 2012-06-21 21:15:32
只需将您的byte[]转换为int,即可查看预期的587值:
var pic = System.Drawing.Image.FromFile(@"c:\mypic.jpg");
var GPSAltitude = pic.GetPropertyItem(6);
var altitude = System.BitConverter.ToInt32(GPSAltitude,0);https://stackoverflow.com/questions/11138769
复制相似问题