Changeset 13061 in josm for trunk/src/com/drew/metadata/exif/makernotes/OlympusMakernoteDescriptor.java
- Timestamp:
- 2017-10-30T22:46:09+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/com/drew/metadata/exif/makernotes/OlympusMakernoteDescriptor.java
r10862 r13061 1 1 /* 2 * Copyright 2002-201 6Drew Noakes2 * Copyright 2002-2017 Drew Noakes 3 3 * 4 4 * Licensed under the Apache License, Version 2.0 (the "License"); … … 21 21 package com.drew.metadata.exif.makernotes; 22 22 23 import com.drew.imaging.PhotographicConversions; 24 import com.drew.lang.Rational; 23 25 import com.drew.lang.DateUtil; 24 26 import com.drew.lang.annotations.NotNull; … … 36 38 * @author Drew Noakes https://drewnoakes.com 37 39 */ 40 @SuppressWarnings("WeakerAccess") 38 41 public class OlympusMakernoteDescriptor extends TagDescriptor<OlympusMakernoteDirectory> 39 42 { … … 66 69 case TAG_BW_MODE: 67 70 return getBWModeDescription(); 68 case TAG_DIGI_ZOOM_RATIO: 69 return getDigiZoomRatioDescription(); 71 case TAG_DIGITAL_ZOOM: 72 return getDigitalZoomDescription(); 73 case TAG_FOCAL_PLANE_DIAGONAL: 74 return getFocalPlaneDiagonalDescription(); 75 case TAG_CAMERA_TYPE: 76 return getCameraTypeDescription(); 70 77 case TAG_CAMERA_ID: 71 78 return getCameraIdDescription(); 79 case TAG_ONE_TOUCH_WB: 80 return getOneTouchWbDescription(); 81 case TAG_SHUTTER_SPEED_VALUE: 82 return getShutterSpeedDescription(); 83 case TAG_ISO_VALUE: 84 return getIsoValueDescription(); 85 case TAG_APERTURE_VALUE: 86 return getApertureValueDescription(); 72 87 case TAG_FLASH_MODE: 73 88 return getFlashModeDescription(); … … 78 93 case TAG_SHARPNESS: 79 94 return getSharpnessDescription(); 95 case TAG_COLOUR_MATRIX: 96 return getColorMatrixDescription(); 97 case TAG_WB_MODE: 98 return getWbModeDescription(); 99 case TAG_RED_BALANCE: 100 return getRedBalanceDescription(); 101 case TAG_BLUE_BALANCE: 102 return getBlueBalanceDescription(); 103 case TAG_CONTRAST: 104 return getContrastDescription(); 105 case TAG_PREVIEW_IMAGE_VALID: 106 return getPreviewImageValidDescription(); 80 107 81 108 case CameraSettings.TAG_EXPOSURE_MODE: … … 102 129 return getMacroModeCameraSettingDescription(); 103 130 case CameraSettings.TAG_DIGITAL_ZOOM: 104 return getDigitalZoomDescription(); 131 return getDigitalZoomCameraSettingDescription(); 105 132 case CameraSettings.TAG_EXPOSURE_COMPENSATION: 106 133 return getExposureCompensationDescription(); … … 138 165 return getSaturationDescription(); 139 166 case CameraSettings.TAG_CONTRAST: 140 return getContrastDescription(); 167 return getContrastCameraSettingDescription(); 141 168 case CameraSettings.TAG_SHARPNESS: 142 169 return getSharpnessCameraSettingDescription(); … … 305 332 306 333 @Nullable 307 public String getDigitalZoomDescription() 334 public String getDigitalZoomCameraSettingDescription() 308 335 { 309 336 return getIndexedDescription(CameraSettings.TAG_DIGITAL_ZOOM, "Off", "Electronic magnification", "Digital zoom 2x"); … … 468 495 469 496 @Nullable 470 public String getContrastDescription() 497 public String getContrastCameraSettingDescription() 471 498 { 472 499 Long value = _directory.getLongObject(CameraSettings.TAG_CONTRAST); … … 647 674 648 675 @Nullable 676 public String getColorMatrixDescription() 677 { 678 int[] obj = _directory.getIntArray(TAG_COLOUR_MATRIX); 679 if (obj == null) 680 return null; 681 682 StringBuilder sb = new StringBuilder(); 683 for (int i = 0; i < obj.length; i++) { 684 sb.append((short)obj[i]); 685 if (i < obj.length - 1) 686 sb.append(" "); 687 } 688 return sb.length() == 0 ? null : sb.toString(); 689 } 690 691 @Nullable 692 public String getWbModeDescription() 693 { 694 int[] obj = _directory.getIntArray(TAG_WB_MODE); 695 if (obj == null) 696 return null; 697 698 String val = String.format("%d %d", obj[0], obj[1]); 699 700 if(val.equals("1 0")) 701 return "Auto"; 702 else if(val.equals("1 2")) 703 return "Auto (2)"; 704 else if(val.equals("1 4")) 705 return "Auto (4)"; 706 else if(val.equals("2 2")) 707 return "3000 Kelvin"; 708 else if(val.equals("2 3")) 709 return "3700 Kelvin"; 710 else if(val.equals("2 4")) 711 return "4000 Kelvin"; 712 else if(val.equals("2 5")) 713 return "4500 Kelvin"; 714 else if(val.equals("2 6")) 715 return "5500 Kelvin"; 716 else if(val.equals("2 7")) 717 return "6500 Kelvin"; 718 else if(val.equals("2 8")) 719 return "7500 Kelvin"; 720 else if(val.equals("3 0")) 721 return "One-touch"; 722 else 723 return "Unknown " + val; 724 } 725 726 @Nullable 727 public String getRedBalanceDescription() 728 { 729 int[] values = _directory.getIntArray(TAG_RED_BALANCE); 730 if (values == null) 731 return null; 732 733 short value = (short)values[0]; 734 735 return String.valueOf((double)value/256d); 736 } 737 738 @Nullable 739 public String getBlueBalanceDescription() 740 { 741 int[] values = _directory.getIntArray(TAG_BLUE_BALANCE); 742 if (values == null) 743 return null; 744 745 short value = (short)values[0]; 746 747 return String.valueOf((double)value/256d); 748 } 749 750 @Nullable 751 public String getContrastDescription() 752 { 753 return getIndexedDescription(TAG_CONTRAST, "High", "Normal", "Low"); 754 } 755 756 @Nullable 757 public String getPreviewImageValidDescription() 758 { 759 return getIndexedDescription(TAG_PREVIEW_IMAGE_VALID, "No", "Yes"); 760 } 761 762 @Nullable 649 763 public String getFocusModeDescription() 650 764 { … … 665 779 666 780 @Nullable 667 public String getDigiZoomRatioDescription() 668 { 669 return getIndexedDescription(TAG_DIGI_ZOOM_RATIO, "Normal", null, "Digital 2x Zoom"); 781 public String getDigitalZoomDescription() 782 { 783 Rational value = _directory.getRational(TAG_DIGITAL_ZOOM); 784 if (value == null) 785 return null; 786 return value.toSimpleString(false); 787 } 788 789 @Nullable 790 public String getFocalPlaneDiagonalDescription() 791 { 792 Rational value = _directory.getRational(TAG_FOCAL_PLANE_DIAGONAL); 793 if (value == null) 794 return null; 795 796 DecimalFormat format = new DecimalFormat("0.###"); 797 return format.format(value.doubleValue()) + " mm"; 798 } 799 800 @Nullable 801 public String getCameraTypeDescription() 802 { 803 String cameratype = _directory.getString(TAG_CAMERA_TYPE); 804 if(cameratype == null) 805 return null; 806 807 if(OlympusMakernoteDirectory.OlympusCameraTypes.containsKey(cameratype)) 808 return OlympusMakernoteDirectory.OlympusCameraTypes.get(cameratype); 809 810 return cameratype; 670 811 } 671 812 … … 680 821 681 822 @Nullable 823 public String getOneTouchWbDescription() 824 { 825 return getIndexedDescription(TAG_ONE_TOUCH_WB, "Off", "On", "On (Preset)"); 826 } 827 828 @Nullable 829 public String getShutterSpeedDescription() 830 { 831 return super.getShutterSpeedDescription(TAG_SHUTTER_SPEED_VALUE); 832 } 833 834 @Nullable 835 public String getIsoValueDescription() 836 { 837 Rational value = _directory.getRational(TAG_ISO_VALUE); 838 if (value == null) 839 return null; 840 841 return String.valueOf(Math.round(Math.pow(2, value.doubleValue() - 5) * 100)); 842 } 843 844 @Nullable 845 public String getApertureValueDescription() 846 { 847 Double aperture = _directory.getDoubleObject(TAG_APERTURE_VALUE); 848 if (aperture == null) 849 return null; 850 double fStop = PhotographicConversions.apertureToFStop(aperture); 851 return getFStopDescription(fStop); 852 } 853 854 @Nullable 682 855 public String getMacroModeDescription() 683 856 { … … 694 867 public String getJpegQualityDescription() 695 868 { 696 return getIndexedDescription(TAG_JPEG_QUALITY, 869 String cameratype = _directory.getString(TAG_CAMERA_TYPE); 870 871 if(cameratype != null) 872 { 873 Integer value = _directory.getInteger(TAG_JPEG_QUALITY); 874 if(value == null) 875 return null; 876 877 if((cameratype.startsWith("SX") && !cameratype.startsWith("SX151")) 878 || cameratype.startsWith("D4322")) 879 { 880 switch (value) 881 { 882 case 0: 883 return "Standard Quality (Low)"; 884 case 1: 885 return "High Quality (Normal)"; 886 case 2: 887 return "Super High Quality (Fine)"; 888 case 6: 889 return "RAW"; 890 default: 891 return "Unknown (" + value.toString() + ")"; 892 } 893 } 894 else 895 { 896 switch (value) 897 { 898 case 0: 899 return "Standard Quality (Low)"; 900 case 1: 901 return "High Quality (Normal)"; 902 case 2: 903 return "Super High Quality (Fine)"; 904 case 4: 905 return "RAW"; 906 case 5: 907 return "Medium-Fine"; 908 case 6: 909 return "Small-Fine"; 910 case 33: 911 return "Uncompressed"; 912 default: 913 return "Unknown (" + value.toString() + ")"; 914 } 915 } 916 } 917 else 918 return getIndexedDescription(TAG_JPEG_QUALITY, 697 919 1, 698 920 "Standard Quality",
Note:
See TracChangeset
for help on using the changeset viewer.