📄 canonmakernotedescriptor.java
字号:
/*
* This is public domain software - that is, you can do whatever you want
* with it, and include it software that is licensed under the GNU or the
* BSD license, or whatever other licence you choose, including proprietary
* closed source licenses. I do ask that you leave this header in tact.
*
* If you make modifications to this code that you think would benefit the
* wider community, please send me a copy and I'll post it on my site.
*
* If you make use of this code, I'd appreciate hearing about it.
* drew@drewnoakes.com
* Latest version of this software kept at
* http://drewnoakes.com/
*
* Created by dnoakes on 27-Nov-2002 10:12:05 using IntelliJ IDEA.
*/
package com.drew.metadata.exif;
import com.drew.metadata.Directory;
import com.drew.metadata.MetadataException;
import com.drew.metadata.TagDescriptor;
/**
*
*/
public class CanonMakernoteDescriptor extends TagDescriptor
{
public CanonMakernoteDescriptor(Directory directory)
{
super(directory);
}
public String getDescription(int tagType) throws MetadataException
{
switch (tagType) {
case CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_ACTIVITY:
return getFlashActivityDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_TYPE:
return getFocusTypeDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_DIGITAL_ZOOM:
return getDigitalZoomDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_QUALITY:
return getQualityDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_MACRO_MODE:
return getMacroModeDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_SELF_TIMER_DELAY:
return getSelfTimerDelayDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_MODE:
return getFlashModeDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_CONTINUOUS_DRIVE_MODE:
return getContinuousDriveModeDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_1:
return getFocusMode1Description();
case CanonMakernoteDirectory.TAG_CANON_STATE1_IMAGE_SIZE:
return getImageSizeDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_EASY_SHOOTING_MODE:
return getEasyShootingModeDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_CONTRAST:
return getContrastDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_SATURATION:
return getSaturationDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_SHARPNESS:
return getSharpnessDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_ISO:
return getIsoDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_METERING_MODE:
return getMeteringModeDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_AF_POINT_SELECTED:
return getAfPointSelectedDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_EXPOSURE_MODE:
return getExposureModeDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_LONG_FOCAL_LENGTH:
return getLongFocalLengthDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_SHORT_FOCAL_LENGTH:
return getShortFocalLengthDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_FOCAL_UNITS_PER_MM:
return getFocalUnitsPerMillimetreDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_DETAILS:
return getFlashDetailsDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_2:
return getFocusMode2Description();
case CanonMakernoteDirectory.TAG_CANON_STATE2_WHITE_BALANCE:
return getWhiteBalanceDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE2_AF_POINT_USED:
return getAfPointUsedDescription();
case CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS:
return getFlashBiasDescription();
case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_LONG_EXPOSURE_NOISE_REDUCTION:
return getLongExposureNoiseReductionDescription();
case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_AUTO_EXPOSURE_LOCK_BUTTONS:
return getShutterAutoExposureLockButtonDescription();
case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MIRROR_LOCKUP:
return getMirrorLockupDescription();
case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_TV_AV_AND_EXPOSURE_LEVEL:
return getTvAndAvExposureLevelDescription();
case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_ASSIST_LIGHT:
return getAutoFocusAssistLightDescription();
case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_SPEED_IN_AV_MODE:
return getShutterSpeedInAvModeDescription();
case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_BRACKETTING:
return getAutoExposureBrackettingSequenceAndAutoCancellationDescription();
case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_CURTAIN_SYNC:
return getShutterCurtainSyncDescription();
case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_STOP:
return getLensAutoFocusStopButtonDescription();
case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_FILL_FLASH_REDUCTION:
return getFillFlashReductionDescription();
case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MENU_BUTTON_RETURN:
return getMenuButtonReturnPositionDescription();
case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SET_BUTTON_FUNCTION:
return getSetButtonFunctionWhenShootingDescription();
case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SENSOR_CLEANING:
return getSensorCleaningDescription();
default:
return _directory.getString(tagType);
}
}
public String getLongExposureNoiseReductionDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_LONG_EXPOSURE_NOISE_REDUCTION)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_LONG_EXPOSURE_NOISE_REDUCTION);
switch (value) {
case 0: return "Off";
case 1: return "On";
default: return "Unknown (" + value + ")";
}
}
public String getShutterAutoExposureLockButtonDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_AUTO_EXPOSURE_LOCK_BUTTONS)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_AUTO_EXPOSURE_LOCK_BUTTONS);
switch (value) {
case 0: return "AF/AE lock";
case 1: return "AE lock/AF";
case 2: return "AF/AF lock";
case 3: return "AE+release/AE+AF";
default: return "Unknown (" + value + ")";
}
}
public String getMirrorLockupDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MIRROR_LOCKUP)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MIRROR_LOCKUP);
switch (value) {
case 0: return "Disabled";
case 1: return "Enabled";
default: return "Unknown (" + value + ")";
}
}
public String getTvAndAvExposureLevelDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_TV_AV_AND_EXPOSURE_LEVEL)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_TV_AV_AND_EXPOSURE_LEVEL);
switch (value) {
case 0: return "1/2 stop";
case 1: return "1/3 stop";
default: return "Unknown (" + value + ")";
}
}
public String getAutoFocusAssistLightDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_ASSIST_LIGHT)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_ASSIST_LIGHT);
switch (value) {
case 0: return "On (Auto)";
case 1: return "Off";
default: return "Unknown (" + value + ")";
}
}
public String getShutterSpeedInAvModeDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_SPEED_IN_AV_MODE)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_SPEED_IN_AV_MODE);
switch (value) {
case 0: return "Automatic";
case 1: return "1/200 (fixed)";
default: return "Unknown (" + value + ")";
}
}
public String getAutoExposureBrackettingSequenceAndAutoCancellationDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_BRACKETTING)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_BRACKETTING);
switch (value) {
case 0: return "0,-,+ / Enabled";
case 1: return "0,-,+ / Disabled";
case 2: return "-,0,+ / Enabled";
case 3: return "-,0,+ / Disabled";
default: return "Unknown (" + value + ")";
}
}
public String getShutterCurtainSyncDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_CURTAIN_SYNC)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_CURTAIN_SYNC);
switch (value) {
case 0: return "1st Curtain Sync";
case 1: return "2nd Curtain Sync";
default: return "Unknown (" + value + ")";
}
}
public String getLensAutoFocusStopButtonDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_STOP)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_STOP);
switch (value) {
case 0: return "AF stop";
case 1: return "Operate AF";
case 2: return "Lock AE and start timer";
default: return "Unknown (" + value + ")";
}
}
public String getFillFlashReductionDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_FILL_FLASH_REDUCTION)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_FILL_FLASH_REDUCTION);
switch (value) {
case 0: return "Enabled";
case 1: return "Disabled";
default: return "Unknown (" + value + ")";
}
}
public String getMenuButtonReturnPositionDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MENU_BUTTON_RETURN)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MENU_BUTTON_RETURN);
switch (value) {
case 0: return "Top";
case 1: return "Previous (volatile)";
case 2: return "Previous";
default: return "Unknown (" + value + ")";
}
}
public String getSetButtonFunctionWhenShootingDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SET_BUTTON_FUNCTION)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SET_BUTTON_FUNCTION);
switch (value) {
case 0: return "Not Assigned";
case 1: return "Change Quality";
case 2: return "Change ISO Speed";
case 3: return "Select Parameters";
default: return "Unknown (" + value + ")";
}
}
public String getSensorCleaningDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SENSOR_CLEANING)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SENSOR_CLEANING);
switch (value) {
case 0: return "Disabled";
case 1: return "Enabled";
default: return "Unknown (" + value + ")";
}
}
public String getFlashBiasDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS);
boolean isNegative = false;
if (value > 0xF000)
{
isNegative = true;
value = 0xFFFF - value;
value++;
}
// this tag is interesting in that the values returned are:
// 0, 0.375, 0.5, 0.626, 1
// not
// 0, 0.33, 0.5, 0.66, 1
return ((isNegative) ? "-" : "") + Float.toString(value / 32f) + " EV";
}
public String getAfPointUsedDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE2_AF_POINT_USED)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE2_AF_POINT_USED);
if ((value & 0x7) == 0) {
return "Right";
} else if ((value & 0x7) == 1) {
return "Centre";
} else if ((value & 0x7) == 2) {
return "Left";
} else {
return "Unknown (" + value + ")";
}
}
public String getWhiteBalanceDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE2_WHITE_BALANCE)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE2_WHITE_BALANCE);
switch (value) {
case 0:
return "Auto";
case 1:
return "Sunny";
case 2:
return "Cloudy";
case 3:
return "Tungsten";
case 4:
return "Flourescent";
case 5:
return "Flash";
case 6:
return "Custom";
default:
return "Unknown (" + value + ")";
}
}
public String getFocusMode2Description() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_2)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_2);
switch (value) {
case 0:
return "Single";
case 1:
return "Continuous";
default:
return "Unknown (" + value + ")";
}
}
public String getFlashDetailsDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_DETAILS)) return null;
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_DETAILS);
if (((value << 14) & 1) > 0) {
return "External E-TTL";
}
if (((value << 13) & 1) > 0) {
return "Internal flash";
}
if (((value << 11) & 1) > 0) {
return "FP sync used";
}
if (((value << 4) & 1) > 0) {
return "FP sync enabled";
}
return "Unknown (" + value + ")";
}
public String getFocalUnitsPerMillimetreDescription() throws MetadataException
{
if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCAL_UNITS_PER_MM)) return "";
int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCAL_UNITS_PER_MM);
if (value != 0) {
return Integer.toString(value);
} else {
return "";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -