List of usage examples for android.graphics Bitmap recycle
public void recycle()
From source file:fr.outadev.skinswitch.MojangAccountSkin.java
@Override public void downloadSkinFromSource(Context context) throws HttpRequest.HttpRequestException, IOException { if (getUuid() == null) { return;// www. j a va2 s .c om } //we have to request a file on Mojang's server if we wanna retrieve the player's skin from his UUID. String body = HttpRequest.get(SESSION_API_URL + getUuid()).useCaches(false).body(); if (body == null) { throw new HttpRequest.HttpRequestException(new IOException("Response to get the skin URL was empty.")); } //we're expecting a JSON document that looks like this: /* { ... "properties": [ { "name": "textures", "value": "<base64 string>" } ] } */ try { //trying to reach the properties.value string JSONObject obj = new JSONObject(body); JSONArray properties = obj.getJSONArray("properties"); if (properties != null) { for (int i = 0; i < properties.length(); i++) { if (properties.getJSONObject(i).getString("name").equals("textures")) { //once that string is reached, we have to decode it: it's in base64 String base64info = properties.getJSONObject(i).getString("value"); JSONObject textureInfo = new JSONObject( new String(Base64.decode(base64info, Base64.DEFAULT))); //the decoded string is also a JSON document, so we parse that. should look like this: /* { ... "textures": { "SKIN": { "url": "<player skin URL>" }, ... } } */ //we want to retrieve the textures.SKIN.url string. that's the skin's URL. /FINALLY/. String url = textureInfo.getJSONObject("textures").getJSONObject("SKIN").getString("url"); if (url != null) { //download the skin from the provided URL byte[] response = HttpRequest.get(url).useCaches(true).bytes(); if (response == null) { throw new HttpRequest.HttpRequestException( new IOException("Couldn't download " + this)); } //decode the bitmap and store it Bitmap bmp = BitmapFactory.decodeByteArray(response, 0, response.length); if (bmp != null) { deleteAllCacheFilesFromFilesystem(context); saveRawSkinBitmap(context, bmp); bmp.recycle(); } } } } } } catch (JSONException e) { throw new HttpRequest.HttpRequestException( new IOException("The response from Mojang was invalid. Woops.")); } }
From source file:Main.java
/** * Transform source Bitmap to targeted width and height. *///from w ww. j av a 2s . com private static Bitmap transform(Matrix scaler, Bitmap source, int targetWidth, int targetHeight, int options) { boolean scaleUp = (options & OPTIONS_SCALE_UP) != 0; boolean recycle = (options & OPTIONS_RECYCLE_INPUT) != 0; int deltaX = source.getWidth() - targetWidth; int deltaY = source.getHeight() - targetHeight; if (!scaleUp && (deltaX < 0 || deltaY < 0)) { /* * In this case the bitmap is smaller, at least in one dimension, * than the target. Transform it by placing as much of the image * as possible into the target and leaving the top/bottom or * left/right (or both) black. */ Bitmap b2 = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b2); int deltaXHalf = Math.max(0, deltaX / 2); int deltaYHalf = Math.max(0, deltaY / 2); Rect src = new Rect(deltaXHalf, deltaYHalf, deltaXHalf + Math.min(targetWidth, source.getWidth()), deltaYHalf + Math.min(targetHeight, source.getHeight())); int dstX = (targetWidth - src.width()) / 2; int dstY = (targetHeight - src.height()) / 2; Rect dst = new Rect(dstX, dstY, targetWidth - dstX, targetHeight - dstY); c.drawBitmap(source, src, dst, null); if (recycle) { source.recycle(); } c.setBitmap(null); return b2; } float bitmapWidthF = source.getWidth(); float bitmapHeightF = source.getHeight(); float bitmapAspect = bitmapWidthF / bitmapHeightF; float viewAspect = (float) targetWidth / targetHeight; if (bitmapAspect > viewAspect) { float scale = targetHeight / bitmapHeightF; if (scale < .9F || scale > 1F) { scaler.setScale(scale, scale); } else { scaler = null; } } else { float scale = targetWidth / bitmapWidthF; if (scale < .9F || scale > 1F) { scaler.setScale(scale, scale); } else { scaler = null; } } Bitmap b1; if (scaler != null) { // this is used for minithumb and crop, so we want to filter here. b1 = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), scaler, true); } else { b1 = source; } if (recycle && b1 != source) { source.recycle(); } int dx1 = Math.max(0, b1.getWidth() - targetWidth); int dy1 = Math.max(0, b1.getHeight() - targetHeight); Bitmap b2 = Bitmap.createBitmap(b1, dx1 / 2, 0, targetWidth, targetHeight); if (b2 != b1) { if (recycle || b1 != source) { b1.recycle(); } } return b2; }
From source file:Main.java
/** * Transform source Bitmap to targeted width and height. */// w w w . j av a 2 s .c om private static Bitmap transform(Matrix scaler, Bitmap source, int targetWidth, int targetHeight, int options) { boolean scaleUp = (options & OPTIONS_SCALE_UP) != 0; boolean recycle = (options & OPTIONS_RECYCLE_INPUT) != 0; int deltaX = source.getWidth() - targetWidth; int deltaY = source.getHeight() - targetHeight; if (!scaleUp && (deltaX < 0 || deltaY < 0)) { /* * In this case the bitmap is smaller, at least in one dimension, * than the target. Transform it by placing as much of the image as * possible into the target and leaving the top/bottom or left/right * (or both) black. */ Bitmap b2 = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b2); int deltaXHalf = Math.max(0, deltaX / 2); int deltaYHalf = Math.max(0, deltaY / 2); Rect src = new Rect(deltaXHalf, deltaYHalf, deltaXHalf + Math.min(targetWidth, source.getWidth()), deltaYHalf + Math.min(targetHeight, source.getHeight())); int dstX = (targetWidth - src.width()) / 2; int dstY = (targetHeight - src.height()) / 2; Rect dst = new Rect(dstX, dstY, targetWidth - dstX, targetHeight - dstY); c.drawBitmap(source, src, dst, null); if (recycle) { source.recycle(); } c.setBitmap(null); return b2; } float bitmapWidthF = source.getWidth(); float bitmapHeightF = source.getHeight(); float bitmapAspect = bitmapWidthF / bitmapHeightF; float viewAspect = (float) targetWidth / targetHeight; if (bitmapAspect > viewAspect) { float scale = targetHeight / bitmapHeightF; if (scale < .9F || scale > 1F) { scaler.setScale(scale, scale); } else { scaler = null; } } else { float scale = targetWidth / bitmapWidthF; if (scale < .9F || scale > 1F) { scaler.setScale(scale, scale); } else { scaler = null; } } Bitmap b1; if (scaler != null) { // this is used for minithumb and crop, so we want to filter here. b1 = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), scaler, true); } else { b1 = source; } if (recycle && b1 != source) { source.recycle(); } int dx1 = Math.max(0, b1.getWidth() - targetWidth); int dy1 = Math.max(0, b1.getHeight() - targetHeight); Bitmap b2 = Bitmap.createBitmap(b1, dx1 / 2, dy1 / 2, targetWidth, targetHeight); if (b2 != b1) { if (recycle || b1 != source) { b1.recycle(); } } return b2; }
From source file:mobisocial.musubi.ui.fragments.ChooseImageDialog.java
@Override public Dialog onCreateDialog(Bundle savedInstanceState) { return new AlertDialog.Builder(getActivity()).setTitle("Choose an Image...") .setItems(new String[] { "From Camera", "From Gallery" }, new DialogInterface.OnClickListener() { @SuppressWarnings("deprecation") @Override/*from w ww . j a va2s. co m*/ public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: final Activity activity = getActivity(); Toast.makeText(activity, "Loading camera...", Toast.LENGTH_SHORT).show(); ((InstrumentedActivity) activity) .doActivityForResult(new PhotoTaker(activity, new PhotoTaker.ResultHandler() { @Override public void onResult(Uri imageUri) { Log.d(getClass().getSimpleName(), "Updating thumbnail..."); try { UriImage image = new UriImage(activity, imageUri); byte[] data = image.getResizedImageData(512, 512, PictureObj.MAX_IMAGE_SIZE / 2); // profile Bitmap sourceBitmap = BitmapFactory.decodeByteArray(data, 0, data.length); int width = sourceBitmap.getWidth(); int height = sourceBitmap.getHeight(); int cropSize = Math.min(width, height); Bitmap cropped = Bitmap.createBitmap(sourceBitmap, 0, 0, cropSize, cropSize); ByteArrayOutputStream baos = new ByteArrayOutputStream(); cropped.compress(Bitmap.CompressFormat.JPEG, 90, baos); cropped.recycle(); sourceBitmap.recycle(); Bundle bundle = new Bundle(); bundle.putByteArray(EXTRA_THUMBNAIL, baos.toByteArray()); Intent res = new Intent(); res.putExtras(bundle); getTargetFragment().onActivityResult(REQUEST_PROFILE_PICTURE, Activity.RESULT_OK, res); } catch (Throwable t) { Log.e("ViewProfile", "failed to generate thumbnail of profile", t); Toast.makeText(activity, "Profile picture capture failed. Try again.", Toast.LENGTH_SHORT).show(); } } }, 200, false)); break; case 1: Intent gallery = new Intent(Intent.ACTION_GET_CONTENT); gallery.setType("image/*"); // god damn fragments. getTargetFragment().startActivityForResult(Intent.createChooser(gallery, null), REQUEST_GALLERY_THUMBNAIL); break; } } }).create(); }
From source file:Main.java
/** * Transform source Bitmap to targeted width and height. *//*from w w w. j av a 2 s .c om*/ private static Bitmap transform(Matrix scaler, Bitmap source, int targetWidth, int targetHeight, int options) { boolean scaleUp = (options & OPTIONS_SCALE_UP) != 0; boolean recycle = (options & OPTIONS_RECYCLE_INPUT) != 0; int deltaX = source.getWidth() - targetWidth; int deltaY = source.getHeight() - targetHeight; if (!scaleUp && (deltaX < 0 || deltaY < 0)) { /* * In this case the bitmap is smaller, at least in one dimension, * than the target. Transform it by placing as much of the image as * possible into the target and leaving the top/bottom or left/right * (or both) black. */ Bitmap b2 = Bitmap.createBitmap(targetWidth, targetHeight, Config.ARGB_8888); Canvas c = new Canvas(b2); int deltaXHalf = Math.max(0, deltaX / 2); int deltaYHalf = Math.max(0, deltaY / 2); Rect src = new Rect(deltaXHalf, deltaYHalf, deltaXHalf + Math.min(targetWidth, source.getWidth()), deltaYHalf + Math.min(targetHeight, source.getHeight())); int dstX = (targetWidth - src.width()) / 2; int dstY = (targetHeight - src.height()) / 2; Rect dst = new Rect(dstX, dstY, targetWidth - dstX, targetHeight - dstY); c.drawBitmap(source, src, dst, null); if (recycle) { source.recycle(); } return b2; } float bitmapWidthF = source.getWidth(); float bitmapHeightF = source.getHeight(); float bitmapAspect = bitmapWidthF / bitmapHeightF; float viewAspect = (float) targetWidth / targetHeight; if (bitmapAspect > viewAspect) { float scale = targetHeight / bitmapHeightF; if (scale < .9F || scale > 1F) { scaler.setScale(scale, scale); } else { scaler = null; } } else { float scale = targetWidth / bitmapWidthF; if (scale < .9F || scale > 1F) { scaler.setScale(scale, scale); } else { scaler = null; } } Bitmap b1; if (scaler != null) { // this is used for minithumb and crop, so we want to filter here. b1 = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), scaler, true); } else { b1 = source; } if (recycle && b1 != source) { source.recycle(); } int dx1 = Math.max(0, b1.getWidth() - targetWidth); int dy1 = Math.max(0, b1.getHeight() - targetHeight); Bitmap b2 = Bitmap.createBitmap(b1, dx1 / 2, dy1 / 2, targetWidth, targetHeight); if (b2 != b1) { if (recycle || b1 != source) { b1.recycle(); } } return b2; }
From source file:com.c4mprod.utils.ImageManager.java
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = 20; paint.setAntiAlias(true);// w w w.java 2s. c om canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); if (output != bitmap) { bitmap.recycle(); } return output; }
From source file:Main.java
/** * Transform source Bitmap to targeted width and height. *///from w w w . j a v a 2s . c o m private static Bitmap transform(Matrix scaler, Bitmap source, int targetWidth, int targetHeight, int options) { boolean scaleUp = (options & OPTIONS_SCALE_UP) != 0; boolean recycle = (options & OPTIONS_RECYCLE_INPUT) != 0; int deltaX = source.getWidth() - targetWidth; int deltaY = source.getHeight() - targetHeight; if (!scaleUp && (deltaX < 0 || deltaY < 0)) { /* * In this case the bitmap is smaller, at least in one dimension, * than the target. Transform it by placing as much of the image * as possible into the target and leaving the top/bottom or * left/right (or both) black. */ Bitmap b2 = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b2); int deltaXHalf = Math.max(0, deltaX / 2); int deltaYHalf = Math.max(0, deltaY / 2); Rect src = new Rect(deltaXHalf, deltaYHalf, deltaXHalf + Math.min(targetWidth, source.getWidth()), deltaYHalf + Math.min(targetHeight, source.getHeight())); int dstX = (targetWidth - src.width()) / 2; int dstY = (targetHeight - src.height()) / 2; Rect dst = new Rect(dstX, dstY, targetWidth - dstX, targetHeight - dstY); c.drawBitmap(source, src, dst, null); if (recycle) { source.recycle(); } return b2; } float bitmapWidthF = source.getWidth(); float bitmapHeightF = source.getHeight(); float bitmapAspect = bitmapWidthF / bitmapHeightF; float viewAspect = (float) targetWidth / targetHeight; if (bitmapAspect > viewAspect) { float scale = targetHeight / bitmapHeightF; if (scale < .9F || scale > 1F) { scaler.setScale(scale, scale); } else { scaler = null; } } else { float scale = targetWidth / bitmapWidthF; if (scale < .9F || scale > 1F) { scaler.setScale(scale, scale); } else { scaler = null; } } Bitmap b1; if (scaler != null) { // this is used for minithumb and crop, so we want to filter here. b1 = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), scaler, true); } else { b1 = source; } if (recycle && b1 != source) { source.recycle(); } int dx1 = Math.max(0, b1.getWidth() - targetWidth); // int dy1 = Math.max(0, b1.getHeight() - targetHeight); Bitmap b2 = Bitmap.createBitmap(b1, dx1 / 2, 0, //dy1 / 2, targetWidth, targetHeight); if (b2 != b1) { if (recycle || b1 != source) { b1.recycle(); } } return b2; }
From source file:Main.java
/** * /* w ww . ja v a 2 s. c o m*/ * @param filePath * @param targetWidth * @param targetHeight * @param recycle * @return */ public static Bitmap resizeAndCropCenter(Bitmap bitmap, int targetWidth, int targetHeight, boolean recycle) { int w = bitmap.getWidth(); int h = bitmap.getHeight(); int scaleWidth = w / targetWidth; int scaleHeight = h / targetHeight; int scale = scaleWidth < scaleHeight ? scaleWidth : scaleHeight; if (scale < 1) { scale = 1; } //get scalebitmap float fScaleWidth = targetWidth / ((float) w); float fScaleHeight = targetHeight / ((float) h); float fScale = fScaleWidth > fScaleHeight ? fScaleWidth : fScaleHeight; if (fScale > 1) fScale = 1; Matrix matrix = new Matrix(); matrix.postScale(fScale, fScale); Bitmap scaleBitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true); //get targetBitmap int bitmapX = (scaleBitmap.getWidth() - targetWidth) / 2; bitmapX = bitmapX > 0 ? bitmapX : 0; int bitmapY = (scaleBitmap.getHeight() - targetHeight) / 2; bitmapY = bitmapY > 0 ? bitmapY : 0; targetWidth = targetWidth < (scaleBitmap.getWidth()) ? targetWidth : (scaleBitmap.getWidth()); targetHeight = targetHeight < (scaleBitmap.getHeight()) ? targetHeight : (scaleBitmap.getHeight()); Bitmap targetBitmap = Bitmap.createBitmap(scaleBitmap, bitmapX, bitmapY, targetWidth, targetHeight); if (recycle) bitmap.recycle(); return targetBitmap; }
From source file:Main.java
public static Bitmap getCircleBitmap(Bitmap bitmap) { final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(output); final int color = Color.RED; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); //final Paint paintBorder = new Paint(); // paintBorder.setColor(Color.GREEN); //paintBorder.setShadowLayer(4.0f, 0.0f, 2.0f, Color.BLACK); //BitmapShader shader = new BitmapShader(Bitmap.createScaledBitmap(output, canvas.getWidth(), canvas.getHeight(), false), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); //paint.setShader(shader); paint.setAntiAlias(true);//from w w w . j a v a 2 s . c o m //paintBorder.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawOval(rectF, paint); //int circleCenter = bitmap.getWidth() / 2; //int borderWidth = 2; //canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter + borderWidth - 4.0f, paintBorder); //canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter - 4.0f, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); //canvas.drawBitmap(bitmap, circleCenter + borderWidth, circleCenter + borderWidth, paint); bitmap.recycle(); return output; }
From source file:com.android.profilerapp.memory.MemoryFragment.java
private void clearGraphs(View view) { synchronized (mLock) { mGraphArtHeap.clearData();/*from ww w.j a va2s . c o m*/ mGraphNativeHeap.clearData(); mGraphPss.clearData(); mMappingPss.clearData(); // Backward-compatbility - not needed from 3.0+ for (Bitmap bm : mBitmaps) { bm.recycle(); } } }