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