summaryrefslogtreecommitdiffstats
path: root/gallerycommon/src/com/android/gallery3d/exif/ExifTag.java
diff options
context:
space:
mode:
Diffstat (limited to 'gallerycommon/src/com/android/gallery3d/exif/ExifTag.java')
-rw-r--r--gallerycommon/src/com/android/gallery3d/exif/ExifTag.java45
1 files changed, 41 insertions, 4 deletions
diff --git a/gallerycommon/src/com/android/gallery3d/exif/ExifTag.java b/gallerycommon/src/com/android/gallery3d/exif/ExifTag.java
index 49cb6edbc..def80a939 100644
--- a/gallerycommon/src/com/android/gallery3d/exif/ExifTag.java
+++ b/gallerycommon/src/com/android/gallery3d/exif/ExifTag.java
@@ -1354,23 +1354,51 @@ public class ExifTag {
(length > mComponentCount) ? mComponentCount : length);
}
+ private String undefinedTypeValueToString() {
+ StringBuilder sbuilder = new StringBuilder();
+ switch (mTagId) {
+ case TAG_COMPONENTS_CONFIGURATION:
+ case TAG_FILE_SOURCE:
+ case TAG_SCENE_TYPE:
+ byte buf[] = (byte[]) mValue;
+ for(int i = 0, n = getComponentCount(); i < n; i++) {
+ if(i != 0) sbuilder.append(" ");
+ sbuilder.append(buf[i]);
+ }
+ break;
+ default:
+ sbuilder.append(new String((byte[]) mValue));
+ }
+ return sbuilder.toString();
+ }
+
/**
* Returns a string representation of the value of this tag.
*/
- public String valueToString() {
+ String valueToString() {
StringBuilder sbuilder = new StringBuilder();
switch (getDataType()) {
case ExifTag.TYPE_UNDEFINED:
+ sbuilder.append(undefinedTypeValueToString());
+ break;
case ExifTag.TYPE_UNSIGNED_BYTE:
- byte buf[] = new byte[getComponentCount()];
- getBytes(buf);
+ byte buf[] = (byte[]) mValue;
for(int i = 0, n = getComponentCount(); i < n; i++) {
if(i != 0) sbuilder.append(" ");
sbuilder.append(String.format("%02x", buf[i]));
}
break;
case ExifTag.TYPE_ASCII:
- sbuilder.append(getString());
+ String s = getString();
+ for (int i = 0, n = s.length(); i < n; i++) {
+ int code = s.codePointAt(i);
+ if (code == 0) continue;
+ if (code > 31 && code < 127) {
+ sbuilder.append((char) code);
+ } else {
+ sbuilder.append('.');
+ }
+ }
break;
case ExifTag.TYPE_UNSIGNED_LONG:
for(int i = 0, n = getComponentCount(); i < n; i++) {
@@ -1415,6 +1443,15 @@ public class ExifTag {
|| tagId == TAG_INTEROPERABILITY_IFD;
}
+ /**
+ * Returns true if the ID is one of the following: {@link #TAG_EXIF_IFD},
+ * {@link #TAG_GPS_IFD}, {@link #TAG_INTEROPERABILITY_IFD}
+ */
+ static boolean isSubIfdOffsetTag(short tagId) {
+ return tagId == TAG_EXIF_IFD
+ || tagId == TAG_GPS_IFD
+ || tagId == TAG_INTEROPERABILITY_IFD;
+ }
@Override
public boolean equals(Object obj) {
if (obj instanceof ExifTag) {