/* * Copyright (C) 2011 The original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.zapta.apps.maniana.util; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import com.zapta.apps.maniana.annotations.ApplicationScope; /** * @author Tal Dayan */ @ApplicationScope public final class BitmapUtil { private static final boolean PRE_API_14 = android.os.Build.VERSION.SDK_INT < 14; /** Do not instantiate */ private BitmapUtil() { } /** Return a bitmap identical to src with rounded corners. */ public static final Bitmap roundCornersRGB888(Bitmap src, int roundPixles) { final Bitmap output = Bitmap .createBitmap(src.getWidth(), src.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); // TODO: document what is special about this color final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, src.getWidth(), src.getHeight()); final RectF rectF = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPixles, roundPixles, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(src, 0, 0, paint); return output; } /** All dimensions are in pixels */ private static Bitmap createColorSwatchBitmap(int widthPixels, int heightPixels, int borderWidthPixels, int fillColor, int borderColor) { final Bitmap bitmap = Bitmap.createBitmap(widthPixels, heightPixels, Config.ARGB_8888); final Canvas canvas = new Canvas(bitmap); if (borderWidthPixels > 0) { canvas.drawColor(borderColor); canvas.clipRect(borderWidthPixels, borderWidthPixels, widthPixels - borderWidthPixels, heightPixels - borderWidthPixels); } canvas.drawColor(fillColor); return bitmap; } /** Move to PreferenceUtil */ public static Bitmap getPreferenceColorPreviewBitmap(int color, boolean isEnabled, float density) { // Determine size in pixels final int sizeDips = PRE_API_14 ? 31 : 22; int sizePixels = (int) (density * sizeDips + 0.5f); // Determine colors int fillColor = color; int borderColor = Color.GRAY; if (!isEnabled) { // Darken the colors if not enabled. fillColor = ColorUtil.compositeColor(fillColor, 0xaa000000); borderColor = ColorUtil.compositeColor(borderColor, 0xaa000000); } // Construct the bitmap return BitmapUtil.createColorSwatchBitmap(sizePixels, sizePixels, 2, fillColor, borderColor); } }