aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/src/cgeo/geocaching/ImageSelectActivity.java11
-rw-r--r--main/src/cgeo/geocaching/utils/ImageUtils.java16
2 files changed, 18 insertions, 9 deletions
diff --git a/main/src/cgeo/geocaching/ImageSelectActivity.java b/main/src/cgeo/geocaching/ImageSelectActivity.java
index 556aa74..a1b11c7 100644
--- a/main/src/cgeo/geocaching/ImageSelectActivity.java
+++ b/main/src/cgeo/geocaching/ImageSelectActivity.java
@@ -9,7 +9,6 @@ import cgeo.geocaching.utils.ImageUtils;
import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
-import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import android.content.Intent;
@@ -265,7 +264,10 @@ public class ImageSelectActivity extends AbstractActivity {
* @return the scaled image path, or <tt>null</tt> if the image cannot be decoded
*/
@Nullable
- private String writeScaledImage(@NonNull final String filePath) {
+ private String writeScaledImage(@Nullable final String filePath) {
+ if (filePath == null) {
+ return null;
+ }
scaleChoiceIndex = scaleView.getSelectedItemPosition();
final int maxXY = getResources().getIntArray(R.array.log_image_scale_values)[scaleChoiceIndex];
return ImageUtils.readScaleAndWriteImage(filePath, maxXY);
@@ -276,7 +278,7 @@ public class ImageSelectActivity extends AbstractActivity {
}
private void loadImagePreview() {
- if (imageUri == null) {
+ if (imageUri == null || imageUri.getPath() == null) {
return;
}
if (!new File(imageUri.getPath()).exists()) {
@@ -284,9 +286,8 @@ public class ImageSelectActivity extends AbstractActivity {
return;
}
+ @SuppressWarnings("null")
final Bitmap bitmap = ImageUtils.readAndScaleImageToFitDisplay(imageUri.getPath());
- int heigth = bitmap.getHeight();
- int width = bitmap.getWidth();
imagePreview.setImageBitmap(bitmap);
imagePreview.setVisibility(View.VISIBLE);
}
diff --git a/main/src/cgeo/geocaching/utils/ImageUtils.java b/main/src/cgeo/geocaching/utils/ImageUtils.java
index 5ac6c60..298b395 100644
--- a/main/src/cgeo/geocaching/utils/ImageUtils.java
+++ b/main/src/cgeo/geocaching/utils/ImageUtils.java
@@ -46,13 +46,17 @@ public final class ImageUtils {
*
* @param filename
* The image file to read and scale
- * @return Bitmap The scaled image
+ * @return Bitmap The scaled image or Null if source image can't be read
*/
+ @Nullable
public static Bitmap readAndScaleImageToFitDisplay(@NonNull final String filename) {
Point displaySize = Compatibility.getDisplaySize();
final int maxWidth = displaySize.x - 25;
final int maxHeight = displaySize.y - 25;
final Bitmap image = readDownsampledImage(filename, maxWidth, maxHeight);
+ if (image == null) {
+ return null;
+ }
final BitmapDrawable scaledImage = scaleBitmapTo(image, maxWidth, maxHeight);
return scaledImage.getBitmap();
}
@@ -64,6 +68,7 @@ public final class ImageUtils {
* The bitmap to scale
* @return BitmapDrawable The scaled image
*/
+ @NonNull
public static BitmapDrawable scaleBitmapTo(@NonNull final Bitmap image, final int maxWidth, final int maxHeight) {
final CgeoApplication app = CgeoApplication.getInstance();
Bitmap result = image;
@@ -94,7 +99,7 @@ public final class ImageUtils {
* @param pathOfOutputImage
* Path to store to
*/
- public static void storeBitmap(@NonNull final Bitmap bitmap, @NonNull final Bitmap.CompressFormat format, final int quality, @NonNull final String pathOfOutputImage) {
+ public static void storeBitmap(final Bitmap bitmap, final Bitmap.CompressFormat format, final int quality, final String pathOfOutputImage) {
try {
FileOutputStream out = new FileOutputStream(pathOfOutputImage);
BufferedOutputStream bos = new BufferedOutputStream(out);
@@ -107,12 +112,12 @@ public final class ImageUtils {
}
/**
- * Scales an image to the desired boundings and encodes to file.
+ * Scales an image to the desired bounds and encodes to file.
*
* @param filePath
* Image to read
* @param maxXY
- * boundings
+ * bounds
* @return filename and path, <tt>null</tt> if something fails
*/
@Nullable
@@ -121,6 +126,9 @@ public final class ImageUtils {
return filePath;
}
Bitmap image = readDownsampledImage(filePath, maxXY, maxXY);
+ if (image == null) {
+ return null;
+ }
final BitmapDrawable scaledImage = scaleBitmapTo(image, maxXY, maxXY);
final File tempImageFile = ImageUtils.getOutputImageFile();
if (tempImageFile == null) {