Android 以 jpeg 格式存储 GPS 已损坏
Android storing GPS in jpeg gets corrupted
我创建了一个简单的 Android-应用程序,它可以拍照并将设备的 GPS 信息存储在 jpg 文件的 exif 标签中。下面的代码展示了这个过程(我知道它很乱)
Android.Locations.Location loc = await client.GetLastLocationAsync();
ByteBuffer buffer = mImage.GetPlanes()[0].Buffer;
byte[] bytes = new byte[buffer.Remaining()];
buffer.Get(bytes);
using (var output = new FileOutputStream(mFile))
{
try
{
output.Write(bytes);
output.Flush();
ExifInterface exif = new ExifInterface(mFile.AbsolutePath);
string[] degMinSec = Location.Convert(loc.Latitude, Format.Seconds).Split(':');
string dms = degMinSec[0] + "/1," + degMinSec[1] + "/1" + degMinSec[2] + "/1000";
string[] degMinSec1 = Location.Convert(loc.Longitude, Format.Seconds).Split(':');
string dms1 = degMinSec1[0] + "/1," + degMinSec1[1] + "/1" + degMinSec1[2] + "/1000";
exif.SetAttribute(ExifInterface.TagGpsLatitude, dms);
exif.SetAttribute(ExifInterface.TagGpsLatitudeRef, loc.Latitude < 0?"S":"N");
exif.SetAttribute(ExifInterface.TagGpsLongitude, dms1);
exif.SetAttribute(ExifInterface.TagGpsLongitudeRef, loc.Longitude < 0 ? "W" : "E");
exif.SaveAttributes();
}
...
所以现在问题:
当我拍照并调试 loc 变量时,它看起来像这样:
如您所见,纬度为 48.4080605,经度为 15.6257273
当我调试转换后的值 dms & dms1 它们显示这些值:
dms 代表纬度,值为 48° 24' 29.0178'',dms1 代表经度,值为 15° 37' 32.61828''。
当我查看 metapicz.com 中的图片 exif 数据时,它显示这些值:
任何人都可以向我解释发生了什么以及我做错了什么吗?
我不明白为什么它显示的位置与应有的位置不同
dms = degMinSec[0] + "/1," + degMinSec[1] + "/1" + degMinSec[2] + "/1000";
不应该是
dms = degMinSec[0] + "/1," + degMinSec[1] + "/1," + degMinSec[2] + "/1000";
?
我创建了一个简单的 Android-应用程序,它可以拍照并将设备的 GPS 信息存储在 jpg 文件的 exif 标签中。下面的代码展示了这个过程(我知道它很乱)
Android.Locations.Location loc = await client.GetLastLocationAsync();
ByteBuffer buffer = mImage.GetPlanes()[0].Buffer;
byte[] bytes = new byte[buffer.Remaining()];
buffer.Get(bytes);
using (var output = new FileOutputStream(mFile))
{
try
{
output.Write(bytes);
output.Flush();
ExifInterface exif = new ExifInterface(mFile.AbsolutePath);
string[] degMinSec = Location.Convert(loc.Latitude, Format.Seconds).Split(':');
string dms = degMinSec[0] + "/1," + degMinSec[1] + "/1" + degMinSec[2] + "/1000";
string[] degMinSec1 = Location.Convert(loc.Longitude, Format.Seconds).Split(':');
string dms1 = degMinSec1[0] + "/1," + degMinSec1[1] + "/1" + degMinSec1[2] + "/1000";
exif.SetAttribute(ExifInterface.TagGpsLatitude, dms);
exif.SetAttribute(ExifInterface.TagGpsLatitudeRef, loc.Latitude < 0?"S":"N");
exif.SetAttribute(ExifInterface.TagGpsLongitude, dms1);
exif.SetAttribute(ExifInterface.TagGpsLongitudeRef, loc.Longitude < 0 ? "W" : "E");
exif.SaveAttributes();
}
...
所以现在问题:
当我拍照并调试 loc 变量时,它看起来像这样:
如您所见,纬度为 48.4080605,经度为 15.6257273
当我调试转换后的值 dms & dms1 它们显示这些值:
dms 代表纬度,值为 48° 24' 29.0178'',dms1 代表经度,值为 15° 37' 32.61828''。
当我查看 metapicz.com 中的图片 exif 数据时,它显示这些值:
任何人都可以向我解释发生了什么以及我做错了什么吗? 我不明白为什么它显示的位置与应有的位置不同
dms = degMinSec[0] + "/1," + degMinSec[1] + "/1" + degMinSec[2] + "/1000";
不应该是
dms = degMinSec[0] + "/1," + degMinSec[1] + "/1," + degMinSec[2] + "/1000";
?