14d75c079f35d85b687d8349e5e2940447d01198eDan Sandler/* 24d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * Copyright (C) 2014 The Android Open Source Project 34d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * 44d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * Licensed under the Apache License, Version 2.0 (the "License"); 54d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * you may not use this file except in compliance with the License. 64d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * You may obtain a copy of the License at 74d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * 84d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * http://www.apache.org/licenses/LICENSE-2.0 94d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * 104d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * Unless required by applicable law or agreed to in writing, software 114d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * distributed under the License is distributed on an "AS IS" BASIS, 124d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * See the License for the specific language governing permissions and 144d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * limitations under the License 154d75c079f35d85b687d8349e5e2940447d01198eDan Sandler */ 164d75c079f35d85b687d8349e5e2940447d01198eDan Sandler 174d75c079f35d85b687d8349e5e2940447d01198eDan Sandlerpackage com.android.systemui; 184d75c079f35d85b687d8349e5e2940447d01198eDan Sandler 194d75c079f35d85b687d8349e5e2940447d01198eDan Sandlerimport android.graphics.Bitmap; 204d75c079f35d85b687d8349e5e2940447d01198eDan Sandlerimport android.graphics.BitmapShader; 214d75c079f35d85b687d8349e5e2940447d01198eDan Sandlerimport android.graphics.Canvas; 224d75c079f35d85b687d8349e5e2940447d01198eDan Sandlerimport android.graphics.Matrix; 234d75c079f35d85b687d8349e5e2940447d01198eDan Sandlerimport android.graphics.Paint; 244d75c079f35d85b687d8349e5e2940447d01198eDan Sandlerimport android.graphics.RectF; 254d75c079f35d85b687d8349e5e2940447d01198eDan Sandlerimport android.graphics.Shader; 264d75c079f35d85b687d8349e5e2940447d01198eDan Sandler 274d75c079f35d85b687d8349e5e2940447d01198eDan Sandlerpublic class BitmapHelper { 284d75c079f35d85b687d8349e5e2940447d01198eDan Sandler /** 294d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * Generate a new bitmap (width x height pixels, ARGB_8888) with the input bitmap scaled 304d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * to fit and clipped to an inscribed circle. 314d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * @param input Bitmap to resize and clip 324d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * @param width Width of output bitmap (and diameter of circle) 334d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * @param height Height of output bitmap 344d75c079f35d85b687d8349e5e2940447d01198eDan Sandler * @return A shiny new bitmap for you to use 354d75c079f35d85b687d8349e5e2940447d01198eDan Sandler */ 364d75c079f35d85b687d8349e5e2940447d01198eDan Sandler public static Bitmap createCircularClip(Bitmap input, int width, int height) { 3703dd983badd966c3f07b484dbc1ff82b7f2f1e98Dan Sandler if (input == null) return null; 3803dd983badd966c3f07b484dbc1ff82b7f2f1e98Dan Sandler 394d75c079f35d85b687d8349e5e2940447d01198eDan Sandler final int inWidth = input.getWidth(); 404d75c079f35d85b687d8349e5e2940447d01198eDan Sandler final int inHeight = input.getHeight(); 414d75c079f35d85b687d8349e5e2940447d01198eDan Sandler final Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 424d75c079f35d85b687d8349e5e2940447d01198eDan Sandler final Canvas canvas = new Canvas(output); 434d75c079f35d85b687d8349e5e2940447d01198eDan Sandler final Paint paint = new Paint(); 444d75c079f35d85b687d8349e5e2940447d01198eDan Sandler paint.setShader(new BitmapShader(input, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)); 454d75c079f35d85b687d8349e5e2940447d01198eDan Sandler paint.setAntiAlias(true); 464d75c079f35d85b687d8349e5e2940447d01198eDan Sandler final RectF srcRect = new RectF(0, 0, inWidth, inHeight); 474d75c079f35d85b687d8349e5e2940447d01198eDan Sandler final RectF dstRect = new RectF(0, 0, width, height); 484d75c079f35d85b687d8349e5e2940447d01198eDan Sandler final Matrix m = new Matrix(); 494d75c079f35d85b687d8349e5e2940447d01198eDan Sandler m.setRectToRect(srcRect, dstRect, Matrix.ScaleToFit.CENTER); 504d75c079f35d85b687d8349e5e2940447d01198eDan Sandler canvas.setMatrix(m); 514d75c079f35d85b687d8349e5e2940447d01198eDan Sandler canvas.drawCircle(inWidth / 2, inHeight / 2, inWidth / 2, paint); 524d75c079f35d85b687d8349e5e2940447d01198eDan Sandler return output; 534d75c079f35d85b687d8349e5e2940447d01198eDan Sandler } 544d75c079f35d85b687d8349e5e2940447d01198eDan Sandler} 55