From 21a2e9cb07caba660120b7f5eba6e053a6cb3ac3 Mon Sep 17 00:00:00 2001 From: Sascha Haeberling Date: Fri, 27 Sep 2013 14:38:39 -0700 Subject: Add basic EXIF to the tiny planet so that rotate succeeds. Bug: 10861115 Change-Id: I1eec2bf4d6879c227a07c5364bc821749ace312b --- src/com/android/camera/data/RotationTask.java | 1 + .../camera/tinyplanet/TinyPlanetFragment.java | 26 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) (limited to 'src/com/android') diff --git a/src/com/android/camera/data/RotationTask.java b/src/com/android/camera/data/RotationTask.java index 8daead156..85fbffa77 100644 --- a/src/com/android/camera/data/RotationTask.java +++ b/src/com/android/camera/data/RotationTask.java @@ -103,6 +103,7 @@ public class RotationTask extends AsyncTask { if (tag != null) { exifInterface.setTag(tag); try { + // Note: This only works if the file already has some EXIF. exifInterface.forceRewriteExif(filePath); long fileSize = new File(filePath).length(); values.put(Images.Media.SIZE, fileSize); diff --git a/src/com/android/camera/tinyplanet/TinyPlanetFragment.java b/src/com/android/camera/tinyplanet/TinyPlanetFragment.java index c49f77ef0..9cde87b16 100644 --- a/src/com/android/camera/tinyplanet/TinyPlanetFragment.java +++ b/src/com/android/camera/tinyplanet/TinyPlanetFragment.java @@ -44,14 +44,18 @@ import com.adobe.xmp.XMPMeta; import com.android.camera.CameraActivity; import com.android.camera.MediaSaveService; import com.android.camera.MediaSaveService.OnMediaSavedListener; +import com.android.camera.exif.ExifInterface; import com.android.camera.tinyplanet.TinyPlanetPreview.PreviewSizeListener; import com.android.camera.util.XmpUtil; import com.android.camera2.R; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; +import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.util.Date; +import java.util.TimeZone; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -358,7 +362,27 @@ public class TinyPlanetFragment extends DialogFragment implements PreviewSizeLis ByteArrayOutputStream jpeg = new ByteArrayOutputStream(); resultBitmap.compress(CompressFormat.JPEG, 100, jpeg); - return new TinyPlanetImage(jpeg.toByteArray(), outputSize); + return new TinyPlanetImage(addExif(jpeg.toByteArray()), outputSize); + } + + /** + * Adds basic EXIF data to the tiny planet image so it an be rewritten + * later. + * + * @param jpeg the JPEG data of the tiny planet. + * @return The JPEG data containing basic EXIF. + */ + private byte[] addExif(byte[] jpeg) { + ExifInterface exif = new ExifInterface(); + exif.addDateTimeStampTag(ExifInterface.TAG_DATE_TIME, System.currentTimeMillis(), + TimeZone.getDefault()); + ByteArrayOutputStream jpegOut = new ByteArrayOutputStream(); + try { + exif.writeExif(jpeg, jpegOut); + } catch (IOException e) { + Log.e(TAG, "Could not write EXIF", e); + } + return jpegOut.toByteArray(); } private int getDisplaySize() { -- cgit v1.2.3