public static ExifData ReadExifData(string path) { var exifData = new ExifData(); using (FileStream fs = System.IO.File.OpenRead(path)) { try { var exifReader = new ExifReader(fs); if (exifReader.GetTagValue <DateTime>(ExifTags.DateTimeDigitized, out DateTime datePictureTaken)) { exifData.timeTaken = datePictureTaken; } if (exifReader.GetTagValue <double>(ExifTags.GPSImgDirection, out double exifHeading)) { exifData.heading = exifHeading; } if (exifReader.GetTagValue <UInt16>(ExifTags.FocalLengthIn35mmFilm, out UInt16 exifFocalLength35mm)) { exifData.focalLength35mm = exifFocalLength35mm > 0 ? exifFocalLength35mm : (int?)null; } if (exifReader.GetTagValue <double[]>(ExifTags.GPSLongitude, out double[] exifGpsLongArray) &&
public static async Task <PhotoData> Import(string path, ExifData exifData, IAppContext appContext) { using (FileStream fs = System.IO.File.OpenRead(path)) { byte[] bytes; using (BinaryReader br = new BinaryReader(fs)) { bytes = br.ReadBytes((int)fs.Length); } var bmp = BitmapFactory.DecodeByteArray(bytes, 0, bytes.Length); var imgWidth = bmp.Width; var imgHeight = bmp.Height; var thumbWidth = THUMBNAIL_WIDTH; var thumbHeight = THUMBNAIL_HEIGHT; var filename = ImageSaverUtils.GetPhotoFileName(); var filepath = System.IO.Path.Combine(ImageSaverUtils.GetPhotosFileFolder(), filename); var file = new Java.IO.File(filepath); byte[] thumbnail = ImageResizer.ResizeImageAndroid(bytes, thumbWidth, thumbHeight, THUMBNAIL_QUALITY); using (var output = new Java.IO.FileOutputStream(file)) { output.Write(bytes); } PoiDatabase poiDatabase = new PoiDatabase(); string jsonCategories = JsonConvert.SerializeObject(appContext.Settings.Categories); PhotoData photodata = new PhotoData { Datetime = DateTime.Now, DatetimeTaken = exifData.timeTaken ?? DateTime.Now, PhotoFileName = filename, Longitude = exifData.location?.Longitude ?? 0, Latitude = exifData.location?.Latitude ?? 0, Altitude = exifData.location?.Altitude ?? 0, Heading = exifData.heading, LeftTiltCorrector = 0, RightTiltCorrector = 0, Thumbnail = thumbnail, JsonCategories = jsonCategories, PictureWidth = imgWidth, PictureHeight = imgHeight, MinAltitude = appContext.Settings.MinAltitute, MaxDistance = appContext.Settings.MaxDistance, FavouriteFilter = appContext.ShowFavoritesOnly, ShowElevationProfile = appContext.Settings.ShowElevationProfile }; //calculate view angle from focal length equivalent on 35mm camera, or use default viev angle 60dg var viewAngle = exifData.focalLength35mm.HasValue ? 2 * System.Math.Tan(35d / 2d / (double)exifData.focalLength35mm.Value) / System.Math.PI * 180 : 60; if (imgWidth > imgHeight) { photodata.ViewAngleHorizontal = viewAngle; photodata.ViewAngleVertical = viewAngle / imgWidth * imgHeight; } else { photodata.ViewAngleHorizontal = viewAngle / imgHeight * imgWidth; photodata.ViewAngleVertical = viewAngle; } if (GpsUtils.HasLocation(exifData.location)) { var placeInfo = await PlaceNameProvider.AsyncGetPlaceName(exifData.location); photodata.Tag = placeInfo.PlaceName + " -> ?"; } else { photodata.Tag = "? -> ?"; } appContext.PhotosModel.InsertItem(photodata); return(photodata); } }