private void preProcessPhotoRetryable(final Uri uri) throws Exception { if (_pic != null) { _pic.recycle(); } _pic = ImageUtils.getBitmap(this, uri, MAX_PIC_SIZE_BYTES); if (_pic != null) { createThumb(_pic); ImageUtils.writeBitmapToFile(_pic, TEMP_PIC_PATH_ON_DISK); _picFile = new File(TEMP_PIC_PATH_ON_DISK); _photoSelectionHandler.sendEmptyMessage(EVENT_SEL_PHOTO_WRITTEN_TO_DISK); } else { throw new Exception("Failed to get photo"); } }
private void createThumb(final Bitmap pic) { if (_thumb != null) { _thumb.recycle(); } MLog.i(TAG, "PhotoChoosingActivity createThumb() before creating thumb.."); _thumb = Bitmap.createScaledBitmap(pic, GmobApp.SCALED_THUMB_SIZE, GmobApp.SCALED_THUMB_SIZE, true); MLog.i(TAG, "PhotoChoosingActivity createThumb() created _thumb"); try { ImageUtils.writeBitmapToFile(_thumb, TEMP_THUMB_PATH_ON_DISK); } catch (final Exception e) { MLog.i(TAG, "", e); } }
/** call this within a thread */ private void createFinalPic() { MLog.i(TAG, "PhotoChoosingActivity createFinalPic() .."); final Bitmap picToBeRecycled = _pic; int newWidth = 0, newHeight = 0; int shorter, longer; if (GmobApp.DISPLAY_METRICS.widthPixels > GmobApp.DISPLAY_METRICS.heightPixels) { longer = GmobApp.DISPLAY_METRICS.widthPixels; shorter = GmobApp.DISPLAY_METRICS.heightPixels; } else { longer = GmobApp.DISPLAY_METRICS.heightPixels; shorter = GmobApp.DISPLAY_METRICS.widthPixels; } /* * If it's a portrait mode oriented photo, then don't allow the height * to be longer than the longest length of the phone * * If it's a landscape mode oriented photo, then don't allow the width * to be longer than the longest length of the phone * * Lastly, we can't keep the original dimensions of the photo, because * it's just too big for mobile viewing. */ if (_pic.getHeight() > _pic.getWidth()) { // it's a portrait mode // picture newWidth = shorter; newHeight = longer; } else { // it's a landscape mode picture newWidth = longer; newHeight = shorter; } /* * lastly, if the photo is actually smaller than the dimensions of the * phone, then just use those dimensions */ if (_pic.getWidth() < newWidth) { newWidth = _pic.getWidth(); } if (_pic.getHeight() < newHeight) { newHeight = _pic.getHeight(); } _pic = ImageUtils.scale(_pic, newWidth, newHeight); if (picToBeRecycled != null && !picToBeRecycled.isRecycled()) { picToBeRecycled.recycle(); } MLog.i( TAG, "PhotoChoosingActivity createFinalPicAndThumb() was successful, pic width=" + _pic.getWidth() + " pic Height=" + _pic.getHeight()); }