我有一个函数可以将三个整数转换成一个字节数组。
private static byte[] FloatToExifGps(int degrees, int minutes, int seconds)
{
var secBytes = BitConverter.GetBytes(seconds);
var secDivisor = BitConverter.GetBytes(100);
var bytedegree = BitConverter.GetBytes(degrees);
byte[] rv = { (byte)degrees, 0, 0, 0, 1, 0, 0, 0, (byte)minutes, 0, 0, 0, 1, 0, 0, 0, secBytes[0], secBytes[1], 0, 0, secDivisor[0], 0, 0, 0 };
return rv;
}
函数SetPropertyItem只接受有三个有理数的byte[]。
如果我使用......函数SetPropertyItem只接受一个字节[],其中有三个有理数。
FloatToExifGps(51, 47, 1234)
那么我就会得到我想要的东西,它会把它转换成一个真正的GPS十进制。
但是,如果我使用一个负整数,那么由于字节二的范围是从0到255,254等,数值就会开始回溯。
因此,例如,如果我试图在这个数字上使用这个函数,则
-1.1159028
它应该出来
-1; 53; 2.7
但是,它将以
255; 53; 3.48
当我使用该数组SetPropertyItem时,它被翻译成字面意思,我得到了一个不可能的gps latlong。文件的图片
我很确定这个问题可以用Two的complment来解决,但是我现在被卡住了。谁能帮帮我?
没关系,这不可能做到我想要的。解决的办法是在exif数据中设置N E S W标签。该值可能是正值,但它将被解释为负值与S标签(南方)。