Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1267 → Rev 1268

/contrib/metadata-extractor/trunk/src/com/drew/metadata/exif/NikonType2MakernoteDescriptor.java
0,0 → 1,169
/*
* 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/
*/
package com.drew.metadata.exif;
 
import com.drew.lang.Rational;
import com.drew.metadata.Directory;
import com.drew.metadata.MetadataException;
import com.drew.metadata.TagDescriptor;
 
import java.text.DecimalFormat;
 
/**
* Provides human-readable string versions of the tags stored in a NikonType2MakernoteDirectory.
* Type-2 applies to the E990 and D-series cameras such as the D1, D70 and D100.
*/
public class NikonType2MakernoteDescriptor extends TagDescriptor
{
public NikonType2MakernoteDescriptor(Directory directory)
{
super(directory);
}
 
private NikonType2MakernoteDirectory getMakernoteDirectory()
{
return (NikonType2MakernoteDirectory)_directory;
}
 
public String getDescription(int tagType) throws MetadataException
{
switch (tagType)
{
case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_LENS:
return getLensDescription();
case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_CAMERA_HUE_ADJUSTMENT:
return getHueAdjustmentDescription();
case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_CAMERA_COLOR_MODE:
return getColorModeDescription();
case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_AUTO_FLASH_COMPENSATION:
return getAutoFlashCompensationDescription();
case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_ISO_1:
return getIsoSettingDescription();
case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_DIGITAL_ZOOM:
return getDigitalZoomDescription();
case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_AF_FOCUS_POSITION:
return getAutoFocusPositionDescription();
case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_FIRMWARE_VERSION:
return getAutoFirmwareVersionDescription();
default:
return _directory.getString(tagType);
}
}
 
public String getAutoFocusPositionDescription() throws MetadataException
{
if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_AF_FOCUS_POSITION)) return null;
int[] values = _directory.getIntArray(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_AF_FOCUS_POSITION);
if (values.length != 4 || values[0] != 0 || values[2] != 0 || values[3] != 0) {
return "Unknown (" + _directory.getString(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_AF_FOCUS_POSITION) + ")";
}
switch (values[1]) {
case 0:
return "Centre";
case 1:
return "Top";
case 2:
return "Bottom";
case 3:
return "Left";
case 4:
return "Right";
default:
return "Unknown (" + values[1] + ")";
}
}
 
public String getDigitalZoomDescription() throws MetadataException
{
if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_DIGITAL_ZOOM)) return null;
Rational rational = _directory.getRational(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_DIGITAL_ZOOM);
if (rational.intValue() == 1) {
return "No digital zoom";
}
return rational.toSimpleString(true) + "x digital zoom";
}
 
public String getIsoSettingDescription() throws MetadataException
{
if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_ISO_1)) return null;
int[] values = _directory.getIntArray(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_ISO_1);
if (values[0] != 0 || values[1] == 0) {
return "Unknown (" + _directory.getString(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_ISO_1) + ")";
}
return "ISO " + values[1];
}
 
public String getAutoFlashCompensationDescription() throws MetadataException
{
Rational ev = getMakernoteDirectory().getAutoFlashCompensation();
 
if (ev==null)
return "Unknown";
 
DecimalFormat decimalFormat = new DecimalFormat("0.##");
return decimalFormat.format(ev.floatValue()) + " EV";
}
 
public String getLensDescription() throws MetadataException
{
if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_LENS))
return null;
 
Rational[] lensValues = _directory.getRationalArray(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_LENS);
 
if (lensValues.length!=4)
return _directory.getString(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_LENS);
 
StringBuffer description = new StringBuffer();
description.append(lensValues[0].intValue());
description.append('-');
description.append(lensValues[1].intValue());
description.append("mm f/");
description.append(lensValues[2].floatValue());
description.append('-');
description.append(lensValues[3].floatValue());
 
return description.toString();
}
 
public String getHueAdjustmentDescription()
{
if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_CAMERA_HUE_ADJUSTMENT))
return null;
 
return _directory.getString(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_CAMERA_HUE_ADJUSTMENT) + " degrees";
}
 
public String getColorModeDescription()
{
if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_CAMERA_COLOR_MODE))
return null;
 
String raw = _directory.getString(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_CAMERA_COLOR_MODE);
if (raw.startsWith("MODE1"))
return "Mode I (sRGB)";
 
return raw;
}
 
public String getAutoFirmwareVersionDescription() throws MetadataException
{
if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_FIRMWARE_VERSION))
return null;
 
int[] ints = _directory.getIntArray(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_FIRMWARE_VERSION);
return ExifDescriptor.convertBytesToVersionString(ints);
}
}