@Nullable protected String getDecimalRational(final int tagType, final int decimalPlaces) { Rational value = _directory.getRational(tagType); if (value == null) return null; return String.format("%." + decimalPlaces + "f", value.doubleValue()); }
@Nullable public String getTemperatureDescription() { Rational value = _directory.getRational(TAG_TEMPERATURE); if (value == null) return null; if (value.getDenominator() == 0xFFFFFFFFL) return "Unknown"; DecimalFormat formatter = new DecimalFormat("0.0"); return formatter.format(value.doubleValue()) + " °C"; }
@Nullable public String getHumidityDescription() { Rational value = _directory.getRational(TAG_HUMIDITY); if (value == null) return null; if (value.getDenominator() == 0xFFFFFFFFL) return "Unknown"; DecimalFormat formatter = new DecimalFormat("0.0"); return formatter.format(value.doubleValue()) + " %"; }
@Nullable public String getPressureDescription() { Rational value = _directory.getRational(TAG_PRESSURE); if (value == null) return null; if (value.getDenominator() == 0xFFFFFFFFL) return "Unknown"; DecimalFormat formatter = new DecimalFormat("0.0"); return formatter.format(value.doubleValue()) + " hPa"; }
@Nullable public String getCameraElevationAngleDescription() { Rational value = _directory.getRational(TAG_CAMERA_ELEVATION_ANGLE); if (value == null) return null; if (value.getDenominator() == 0xFFFFFFFFL) return "Unknown"; DecimalFormat formatter = new DecimalFormat("0.##"); return formatter.format(value.doubleValue()) + " degrees"; }
@Nullable public String getXResolutionDescription() { Rational value = _directory.getRational(TAG_X_RESOLUTION); if (value == null) return null; final String unit = getResolutionDescription(); return String.format("%s dots per %s", value.toSimpleString(_allowDecimalRepresentationOfRationals), unit == null ? "unit" : unit.toLowerCase()); }
@Nullable public String getYResolutionDescription() { Rational value = _directory.getRational(TAG_Y_RESOLUTION); if (value==null) return null; final String unit = getResolutionDescription(); return String.format("%s dots per %s", value.toSimpleString(_allowDecimalRepresentationOfRationals), unit == null ? "unit" : unit.toLowerCase()); }
@Nullable public String getExposureBiasDescription() { Rational value = _directory.getRational(TAG_EXPOSURE_BIAS); if (value == null) return null; return value.toSimpleString(true) + " EV"; }
@Nullable public String getWaterDepthDescription() { Rational value = _directory.getRational(TAG_WATER_DEPTH); if (value == null) return null; if (value.getDenominator() == 0xFFFFFFFFL) return "Unknown"; DecimalFormat formatter = new DecimalFormat("0.0##"); return formatter.format(value.doubleValue()) + " metres"; }
@Nullable public String getAccelerationDescription() { Rational value = _directory.getRational(TAG_ACCELERATION); if (value == null) return null; if (value.getDenominator() == 0xFFFFFFFFL) return "Unknown"; DecimalFormat formatter = new DecimalFormat("0.0##"); return formatter.format(value.doubleValue()) + " mGal"; }
@Nullable public String getBrightnessValueDescription() { Rational value = _directory.getRational(TAG_BRIGHTNESS_VALUE); if (value == null) return null; if (value.getNumerator() == 0xFFFFFFFFL) return "Unknown"; DecimalFormat formatter = new DecimalFormat("0.0##"); return formatter.format(value.doubleValue()); }
@Nullable protected String getSimpleRational(final int tagType) { Rational value = _directory.getRational(tagType); if (value == null) return null; return value.toSimpleString(true); }
@Nullable public String getDigitalZoomRatioDescription() { Rational value = _directory.getRational(TAG_DIGITAL_ZOOM_RATIO); return value == null ? null : value.getNumerator() == 0 ? "Digital zoom not used" : new DecimalFormat("0.#").format(value.doubleValue()); }
@Nullable protected String getRationalOrDoubleString(int tagType) { Rational rational = _directory.getRational(tagType); if (rational != null) return rational.toSimpleString(true); Double d = _directory.getDoubleObject(tagType); if (d != null) { DecimalFormat format = new DecimalFormat("0.###"); return format.format(d); } return null; }
@Nullable public String getSubjectDistanceDescription() { Rational value = _directory.getRational(TAG_SUBJECT_DISTANCE); if (value == null) return null; if (value.getNumerator() == 0xFFFFFFFFL) return "Infinity"; if (value.getNumerator() == 0) return "Unknown"; DecimalFormat formatter = new DecimalFormat("0.0##"); return formatter.format(value.doubleValue()) + " metres"; }
@Nullable public String getFocalLengthDescription() { Rational value = _directory.getRational(TAG_FOCAL_LENGTH); return value == null ? null : getFocalLengthDescription(value.doubleValue()); }
@Nullable public String getFocalPlaneXResolutionDescription() { Rational rational = _directory.getRational(TAG_FOCAL_PLANE_X_RESOLUTION); if (rational == null) return null; final String unit = getFocalPlaneResolutionUnitDescription(); return rational.getReciprocal().toSimpleString(_allowDecimalRepresentationOfRationals) + (unit == null ? "" : " " + unit.toLowerCase()); }
@Nullable public String getFNumberDescription() { Rational value = _directory.getRational(TAG_FNUMBER); if (value == null) return null; return getFStopDescription(value.doubleValue()); }
@Nullable public String getFocalPlaneYResolutionDescription() { Rational rational = _directory.getRational(TAG_FOCAL_PLANE_Y_RESOLUTION); if (rational == null) return null; final String unit = getFocalPlaneResolutionUnitDescription(); return rational.getReciprocal().toSimpleString(_allowDecimalRepresentationOfRationals) + (unit == null ? "" : " " + unit.toLowerCase()); }
@Nullable public String getCompressedAverageBitsPerPixelDescription() { Rational value = _directory.getRational(TAG_COMPRESSED_AVERAGE_BITS_PER_PIXEL); if (value == null) return null; String ratio = value.toSimpleString(_allowDecimalRepresentationOfRationals); return value.isInteger() && value.intValue() == 1 ? ratio + " bit/pixel" : ratio + " bits/pixel"; }