diff options
| -rw-r--r-- | main/src/cgeo/geocaching/ImageSelectActivity.java | 11 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/utils/ImageUtils.java | 16 |
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) { |
