Loading packages/WallpaperCropper/src/com/android/photos/BitmapRegionTileSource.java +32 −7 Original line number Diff line number Diff line Loading @@ -24,6 +24,9 @@ import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.BitmapRegionDecoder; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.Rect; import android.net.Uri; import android.os.Build; Loading Loading @@ -53,7 +56,8 @@ class SimpleBitmapRegionDecoderWrapper implements SimpleBitmapRegionDecoder { private SimpleBitmapRegionDecoderWrapper(BitmapRegionDecoder decoder) { mDecoder = decoder; } public static SimpleBitmapRegionDecoderWrapper newInstance(String pathName, boolean isShareable) { public static SimpleBitmapRegionDecoderWrapper newInstance( String pathName, boolean isShareable) { try { BitmapRegionDecoder d = BitmapRegionDecoder.newInstance(pathName, isShareable); if (d != null) { Loading @@ -65,7 +69,8 @@ class SimpleBitmapRegionDecoderWrapper implements SimpleBitmapRegionDecoder { } return null; } public static SimpleBitmapRegionDecoderWrapper newInstance(InputStream is, boolean isShareable) { public static SimpleBitmapRegionDecoderWrapper newInstance( InputStream is, boolean isShareable) { try { BitmapRegionDecoder d = BitmapRegionDecoder.newInstance(is, isShareable); if (d != null) { Loading @@ -89,8 +94,9 @@ class SimpleBitmapRegionDecoderWrapper implements SimpleBitmapRegionDecoder { } class DumbBitmapRegionDecoder implements SimpleBitmapRegionDecoder { //byte[] streamCopy; Bitmap mBuffer; Canvas mTempCanvas; Paint mTempPaint; private DumbBitmapRegionDecoder(Bitmap b) { mBuffer = b; } Loading @@ -115,9 +121,23 @@ class DumbBitmapRegionDecoder implements SimpleBitmapRegionDecoder { return mBuffer.getHeight(); } public Bitmap decodeRegion(Rect wantRegion, BitmapFactory.Options options) { System.out.println("DECODING WITH SAMPLE LEVEL OF " + options.inSampleSize); return Bitmap.createBitmap( mBuffer, wantRegion.left, wantRegion.top, wantRegion.width(), wantRegion.height()); if (mTempCanvas == null) { mTempCanvas = new Canvas(); mTempPaint = new Paint(); mTempPaint.setFilterBitmap(true); } int sampleSize = Math.max(options.inSampleSize, 1); Bitmap newBitmap = Bitmap.createBitmap( wantRegion.width() / sampleSize, wantRegion.height() / sampleSize, Bitmap.Config.ARGB_8888); mTempCanvas.setBitmap(newBitmap); mTempCanvas.save(); mTempCanvas.scale(1f / sampleSize, 1f / sampleSize); mTempCanvas.drawBitmap(mBuffer, -wantRegion.left, -wantRegion.top, mTempPaint); mTempCanvas.restore(); mTempCanvas.setBitmap(null); return newBitmap; } } Loading Loading @@ -256,6 +276,7 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { if (regionDecoder == null) { is = regenerateInputStream(); regionDecoder = DumbBitmapRegionDecoder.newInstance(is); Utils.closeSilently(is); } return regionDecoder; } catch (FileNotFoundException e) { Loading @@ -280,8 +301,9 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { } @Override public boolean readExif(ExifInterface ei) { InputStream is = null; try { InputStream is = regenerateInputStream(); is = regenerateInputStream(); ei.readExif(is); Utils.closeSilently(is); return true; Loading @@ -291,6 +313,8 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { } catch (IOException e) { Log.e("BitmapRegionTileSource", "Failed to load URI " + mUri, e); return false; } finally { Utils.closeSilently(is); } } } Loading @@ -316,6 +340,7 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { if (regionDecoder == null) { is = regenerateInputStream(); regionDecoder = DumbBitmapRegionDecoder.newInstance(is); Utils.closeSilently(is); } return regionDecoder; } Loading packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java +17 −11 Original line number Diff line number Diff line Loading @@ -247,19 +247,19 @@ public class WallpaperCropActivity extends Activity { private static int getRotationFromExifHelper( String path, Resources res, int resId, Context context, Uri uri) { ExifInterface ei = new ExifInterface(); InputStream is = null; BufferedInputStream bis = null; try { if (path != null) { ei.readExif(path); } else if (uri != null) { InputStream is = context.getContentResolver().openInputStream(uri); BufferedInputStream bis = new BufferedInputStream(is); is = context.getContentResolver().openInputStream(uri); bis = new BufferedInputStream(is); ei.readExif(bis); bis.close(); } else { InputStream is = res.openRawResource(resId); BufferedInputStream bis = new BufferedInputStream(is); is = res.openRawResource(resId); bis = new BufferedInputStream(is); ei.readExif(bis); bis.close(); } Integer ori = ei.getTagIntValue(ExifInterface.TAG_ORIENTATION); if (ori != null) { Loading @@ -267,6 +267,9 @@ public class WallpaperCropActivity extends Activity { } } catch (IOException e) { Log.w(LOGTAG, "Getting exif data failed", e); } finally { Utils.closeSilently(bis); Utils.closeSilently(is); } return 0; } Loading Loading @@ -606,13 +609,13 @@ public class WallpaperCropActivity extends Activity { } // See how much we're reducing the size of the image int scaleDownSampleSize = Math.min(roundedTrueCrop.width() / mOutWidth, roundedTrueCrop.height() / mOutHeight); int scaleDownSampleSize = Math.max(1, Math.min(roundedTrueCrop.width() / mOutWidth, roundedTrueCrop.height() / mOutHeight)); // Attempt to open a region decoder BitmapRegionDecoder decoder = null; InputStream is = null; try { InputStream is = regenerateInputStream(); is = regenerateInputStream(); if (is == null) { Log.w(LOGTAG, "cannot get input stream for uri=" + mInUri.toString()); failure = true; Loading @@ -622,6 +625,9 @@ public class WallpaperCropActivity extends Activity { Utils.closeSilently(is); } catch (IOException e) { Log.w(LOGTAG, "cannot open region decoder for file: " + mInUri.toString(), e); } finally { Utils.closeSilently(is); is = null; } Bitmap crop = null; Loading @@ -637,7 +643,7 @@ public class WallpaperCropActivity extends Activity { if (crop == null) { // BitmapRegionDecoder has failed, try to crop in-memory InputStream is = regenerateInputStream(); is = regenerateInputStream(); Bitmap fullSize = null; if (is != null) { BitmapFactory.Options options = new BitmapFactory.Options(); Loading Loading
packages/WallpaperCropper/src/com/android/photos/BitmapRegionTileSource.java +32 −7 Original line number Diff line number Diff line Loading @@ -24,6 +24,9 @@ import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.BitmapRegionDecoder; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.Rect; import android.net.Uri; import android.os.Build; Loading Loading @@ -53,7 +56,8 @@ class SimpleBitmapRegionDecoderWrapper implements SimpleBitmapRegionDecoder { private SimpleBitmapRegionDecoderWrapper(BitmapRegionDecoder decoder) { mDecoder = decoder; } public static SimpleBitmapRegionDecoderWrapper newInstance(String pathName, boolean isShareable) { public static SimpleBitmapRegionDecoderWrapper newInstance( String pathName, boolean isShareable) { try { BitmapRegionDecoder d = BitmapRegionDecoder.newInstance(pathName, isShareable); if (d != null) { Loading @@ -65,7 +69,8 @@ class SimpleBitmapRegionDecoderWrapper implements SimpleBitmapRegionDecoder { } return null; } public static SimpleBitmapRegionDecoderWrapper newInstance(InputStream is, boolean isShareable) { public static SimpleBitmapRegionDecoderWrapper newInstance( InputStream is, boolean isShareable) { try { BitmapRegionDecoder d = BitmapRegionDecoder.newInstance(is, isShareable); if (d != null) { Loading @@ -89,8 +94,9 @@ class SimpleBitmapRegionDecoderWrapper implements SimpleBitmapRegionDecoder { } class DumbBitmapRegionDecoder implements SimpleBitmapRegionDecoder { //byte[] streamCopy; Bitmap mBuffer; Canvas mTempCanvas; Paint mTempPaint; private DumbBitmapRegionDecoder(Bitmap b) { mBuffer = b; } Loading @@ -115,9 +121,23 @@ class DumbBitmapRegionDecoder implements SimpleBitmapRegionDecoder { return mBuffer.getHeight(); } public Bitmap decodeRegion(Rect wantRegion, BitmapFactory.Options options) { System.out.println("DECODING WITH SAMPLE LEVEL OF " + options.inSampleSize); return Bitmap.createBitmap( mBuffer, wantRegion.left, wantRegion.top, wantRegion.width(), wantRegion.height()); if (mTempCanvas == null) { mTempCanvas = new Canvas(); mTempPaint = new Paint(); mTempPaint.setFilterBitmap(true); } int sampleSize = Math.max(options.inSampleSize, 1); Bitmap newBitmap = Bitmap.createBitmap( wantRegion.width() / sampleSize, wantRegion.height() / sampleSize, Bitmap.Config.ARGB_8888); mTempCanvas.setBitmap(newBitmap); mTempCanvas.save(); mTempCanvas.scale(1f / sampleSize, 1f / sampleSize); mTempCanvas.drawBitmap(mBuffer, -wantRegion.left, -wantRegion.top, mTempPaint); mTempCanvas.restore(); mTempCanvas.setBitmap(null); return newBitmap; } } Loading Loading @@ -256,6 +276,7 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { if (regionDecoder == null) { is = regenerateInputStream(); regionDecoder = DumbBitmapRegionDecoder.newInstance(is); Utils.closeSilently(is); } return regionDecoder; } catch (FileNotFoundException e) { Loading @@ -280,8 +301,9 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { } @Override public boolean readExif(ExifInterface ei) { InputStream is = null; try { InputStream is = regenerateInputStream(); is = regenerateInputStream(); ei.readExif(is); Utils.closeSilently(is); return true; Loading @@ -291,6 +313,8 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { } catch (IOException e) { Log.e("BitmapRegionTileSource", "Failed to load URI " + mUri, e); return false; } finally { Utils.closeSilently(is); } } } Loading @@ -316,6 +340,7 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { if (regionDecoder == null) { is = regenerateInputStream(); regionDecoder = DumbBitmapRegionDecoder.newInstance(is); Utils.closeSilently(is); } return regionDecoder; } Loading
packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java +17 −11 Original line number Diff line number Diff line Loading @@ -247,19 +247,19 @@ public class WallpaperCropActivity extends Activity { private static int getRotationFromExifHelper( String path, Resources res, int resId, Context context, Uri uri) { ExifInterface ei = new ExifInterface(); InputStream is = null; BufferedInputStream bis = null; try { if (path != null) { ei.readExif(path); } else if (uri != null) { InputStream is = context.getContentResolver().openInputStream(uri); BufferedInputStream bis = new BufferedInputStream(is); is = context.getContentResolver().openInputStream(uri); bis = new BufferedInputStream(is); ei.readExif(bis); bis.close(); } else { InputStream is = res.openRawResource(resId); BufferedInputStream bis = new BufferedInputStream(is); is = res.openRawResource(resId); bis = new BufferedInputStream(is); ei.readExif(bis); bis.close(); } Integer ori = ei.getTagIntValue(ExifInterface.TAG_ORIENTATION); if (ori != null) { Loading @@ -267,6 +267,9 @@ public class WallpaperCropActivity extends Activity { } } catch (IOException e) { Log.w(LOGTAG, "Getting exif data failed", e); } finally { Utils.closeSilently(bis); Utils.closeSilently(is); } return 0; } Loading Loading @@ -606,13 +609,13 @@ public class WallpaperCropActivity extends Activity { } // See how much we're reducing the size of the image int scaleDownSampleSize = Math.min(roundedTrueCrop.width() / mOutWidth, roundedTrueCrop.height() / mOutHeight); int scaleDownSampleSize = Math.max(1, Math.min(roundedTrueCrop.width() / mOutWidth, roundedTrueCrop.height() / mOutHeight)); // Attempt to open a region decoder BitmapRegionDecoder decoder = null; InputStream is = null; try { InputStream is = regenerateInputStream(); is = regenerateInputStream(); if (is == null) { Log.w(LOGTAG, "cannot get input stream for uri=" + mInUri.toString()); failure = true; Loading @@ -622,6 +625,9 @@ public class WallpaperCropActivity extends Activity { Utils.closeSilently(is); } catch (IOException e) { Log.w(LOGTAG, "cannot open region decoder for file: " + mInUri.toString(), e); } finally { Utils.closeSilently(is); is = null; } Bitmap crop = null; Loading @@ -637,7 +643,7 @@ public class WallpaperCropActivity extends Activity { if (crop == null) { // BitmapRegionDecoder has failed, try to crop in-memory InputStream is = regenerateInputStream(); is = regenerateInputStream(); Bitmap fullSize = null; if (is != null) { BitmapFactory.Options options = new BitmapFactory.Options(); Loading