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