diff options
| -rw-r--r-- | main/src/cgeo/geocaching/ImageSelectActivity.java | 62 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/utils/ImageUtils.java | 70 |
2 files changed, 72 insertions, 60 deletions
diff --git a/main/src/cgeo/geocaching/ImageSelectActivity.java b/main/src/cgeo/geocaching/ImageSelectActivity.java index 66c0707..e24c34a 100644 --- a/main/src/cgeo/geocaching/ImageSelectActivity.java +++ b/main/src/cgeo/geocaching/ImageSelectActivity.java @@ -4,9 +4,7 @@ import butterknife.InjectView; import butterknife.Views; import cgeo.geocaching.activity.AbstractActivity; -import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.settings.Settings; -import cgeo.geocaching.utils.FileUtils; import cgeo.geocaching.utils.ImageUtils; import cgeo.geocaching.utils.Log; @@ -16,7 +14,6 @@ import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; @@ -30,9 +27,6 @@ import android.widget.ImageView; import android.widget.Spinner; import java.io.File; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; public class ImageSelectActivity extends AbstractActivity { @@ -190,7 +184,7 @@ public class ImageSelectActivity extends AbstractActivity { // create Intent to take a picture and return control to the calling application Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); - imageUri = getOutputImageFileUri(); // create a file to save the image + imageUri = ImageUtils.getOutputImageFileUri(); // create a file to save the image if (imageUri == null) { showFailure(); return; @@ -272,30 +266,7 @@ public class ImageSelectActivity extends AbstractActivity { private String writeScaledImage(final String filePath) { scaleChoiceIndex = scaleView.getSelectedItemPosition(); final int maxXY = getResources().getIntArray(R.array.log_image_scale_values)[scaleChoiceIndex]; - if (maxXY == 0) { - return filePath; - } - BitmapFactory.Options sizeOnlyOptions = new BitmapFactory.Options(); - sizeOnlyOptions.inJustDecodeBounds = true; - BitmapFactory.decodeFile(filePath, sizeOnlyOptions); - final int myMaxXY = Math.max(sizeOnlyOptions.outHeight, sizeOnlyOptions.outWidth); - final int sampleSize = myMaxXY / maxXY; - Bitmap image; - if (sampleSize > 1) { - BitmapFactory.Options sampleOptions = new BitmapFactory.Options(); - sampleOptions.inSampleSize = sampleSize; - image = BitmapFactory.decodeFile(filePath, sampleOptions); - } else { - image = BitmapFactory.decodeFile(filePath); - } - // If image decoding fail, return null - if (image == null) { - return null; - } - final BitmapDrawable scaledImage = ImageUtils.scaleBitmapTo(image, maxXY, maxXY); - final String uploadFilename = getOutputImageFile().getPath(); - ImageUtils.storeBitmap(scaledImage.getBitmap(), Bitmap.CompressFormat.JPEG, 75, uploadFilename); - return uploadFilename; + return ImageUtils.readScaleAndWriteImage(filePath, maxXY); } private void showFailure() { @@ -317,33 +288,4 @@ public class ImageSelectActivity extends AbstractActivity { imagePreview.setImageBitmap(bitmap); imagePreview.setVisibility(View.VISIBLE); } - - private static Uri getOutputImageFileUri() { - final File file = getOutputImageFile(); - if (file == null) { - return null; - } - return Uri.fromFile(file); - } - - /** Create a File for saving an image or video */ - private static File getOutputImageFile() { - // To be safe, you should check that the SDCard is mounted - // using Environment.getExternalStorageState() before doing this. - - File mediaStorageDir = new File(Compatibility.getExternalPictureDir(), "cgeo"); - // This location works best if you want the created images to be shared - // between applications and persist after your app has been uninstalled. - - // Create the storage directory if it does not exist - if (!mediaStorageDir.exists()) { - if (!FileUtils.mkdirs(mediaStorageDir)) { - return null; - } - } - - // Create a media file name - String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date()); - return new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg"); - } } diff --git a/main/src/cgeo/geocaching/utils/ImageUtils.java b/main/src/cgeo/geocaching/utils/ImageUtils.java index dc6333a..34bfa1c 100644 --- a/main/src/cgeo/geocaching/utils/ImageUtils.java +++ b/main/src/cgeo/geocaching/utils/ImageUtils.java @@ -4,13 +4,19 @@ import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.compatibility.Compatibility; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Point; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; import java.io.BufferedOutputStream; +import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; public final class ImageUtils { @@ -80,4 +86,68 @@ public final class ImageUtils { Log.e("ImageHelper.storeBitmap", e); } } + + /** + * Scales an image to the desired boundings and encodes to file. + * + * @param filePath + * Image to read + * @param maxXY + * boundings + * @return String filename and path, NULL if something fails + */ + public static String readScaleAndWriteImage(final String filePath, final int maxXY) { + if (maxXY <= 0) { + return filePath; + } + BitmapFactory.Options sizeOnlyOptions = new BitmapFactory.Options(); + sizeOnlyOptions.inJustDecodeBounds = true; + BitmapFactory.decodeFile(filePath, sizeOnlyOptions); + final int myMaxXY = Math.max(sizeOnlyOptions.outHeight, sizeOnlyOptions.outWidth); + final int sampleSize = myMaxXY / maxXY; + Bitmap image; + if (sampleSize > 1) { + BitmapFactory.Options sampleOptions = new BitmapFactory.Options(); + sampleOptions.inSampleSize = sampleSize; + image = BitmapFactory.decodeFile(filePath, sampleOptions); + } else { + image = BitmapFactory.decodeFile(filePath); + } + if (image == null) { + return null; + } + final BitmapDrawable scaledImage = scaleBitmapTo(image, maxXY, maxXY); + final String uploadFilename = ImageUtils.getOutputImageFile().getPath(); + storeBitmap(scaledImage.getBitmap(), Bitmap.CompressFormat.JPEG, 75, uploadFilename); + return uploadFilename; + } + + /** Create a File for saving an image or video */ + public static File getOutputImageFile() { + // To be safe, you should check that the SDCard is mounted + // using Environment.getExternalStorageState() before doing this. + + File mediaStorageDir = new File(Compatibility.getExternalPictureDir(), "cgeo"); + // This location works best if you want the created images to be shared + // between applications and persist after your app has been uninstalled. + + // Create the storage directory if it does not exist + if (!mediaStorageDir.exists()) { + if (!FileUtils.mkdirs(mediaStorageDir)) { + return null; + } + } + + // Create a media file name + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date()); + return new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg"); + } + + public static Uri getOutputImageFileUri() { + final File file = getOutputImageFile(); + if (file == null) { + return null; + } + return Uri.fromFile(file); + } } |
