You need to sign in or sign up before continuing.
Commit 505b2c38 authored by Varun Patil's avatar Varun Patil

Fix circular image when aspect ratio is not square

parent 31bf981e
...@@ -7,10 +7,12 @@ import android.content.Intent; ...@@ -7,10 +7,12 @@ import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint; import android.graphics.Paint;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode; import android.graphics.PorterDuffXfermode;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.Xfermode;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat;
...@@ -161,7 +163,7 @@ public class InstiAppFirebaseMessagingService extends FirebaseMessagingService { ...@@ -161,7 +163,7 @@ public class InstiAppFirebaseMessagingService extends FirebaseMessagingService {
Bitmap image = Picasso.get().load(imageUrl).get(); Bitmap image = Picasso.get().load(imageUrl).get();
Bitmap largeIcon = null; Bitmap largeIcon = null;
if (largeIconUrl != null) { if (largeIconUrl != null) {
largeIcon = getCroppedBitmap(Picasso.get().load(largeIconUrl).get()); largeIcon = getCroppedBitmap(Picasso.get().load(largeIconUrl).get(), 200);
} }
return new Bitmap[]{image, largeIcon}; return new Bitmap[]{image, largeIcon};
} catch (IOException e) { } catch (IOException e) {
...@@ -189,23 +191,41 @@ public class InstiAppFirebaseMessagingService extends FirebaseMessagingService { ...@@ -189,23 +191,41 @@ public class InstiAppFirebaseMessagingService extends FirebaseMessagingService {
}.execute(); }.execute();
} }
/** https://stackoverflow.com/a/12089127 */ /** Get circular center cropped bitmap */
public static Bitmap getCroppedBitmap(Bitmap bitmap) { public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), Bitmap sbmp;
bitmap.getHeight(), Bitmap.Config.ARGB_8888);
if (bmp.getWidth() != radius || bmp.getHeight() != radius) {
float smallest = Math.min(bmp.getWidth(), bmp.getHeight());
float factor = smallest / radius;
sbmp = Bitmap.createScaledBitmap(bmp, (int)(bmp.getWidth() / factor), (int)(bmp.getHeight() / factor), false);
} else {
sbmp = bmp;
}
Bitmap output = Bitmap.createBitmap(radius, radius,
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output); Canvas canvas = new Canvas(output);
final int color = 0xff424242; final int color = 0xffa19774;
final Paint paint = new Paint(); final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final Rect rect = new Rect(0, 0, radius, radius);
final Rect destRect = new Rect(
(sbmp.getWidth() - radius) / 2,
(sbmp.getHeight() - radius) / 2,
radius + (sbmp.getWidth() - radius) / 2,
radius + (sbmp.getHeight() - radius) / 2);
paint.setAntiAlias(true); paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawARGB(0, 0, 0, 0); canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color); paint.setColor(Color.parseColor("#BAB399"));
canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, canvas.drawCircle(radius / 2,
bitmap.getWidth() / 2, paint); radius / 2, radius / 2, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint); canvas.drawBitmap(sbmp, destRect, rect, paint);
return output; return output;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment