/* * Copyright (C) 2011 The Android Open Source Project * * 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.android.gallery3d.gadget; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Paint; import android.util.Log; import com.android.gallery3d.R; import com.android.gallery3d.data.MediaItem; import com.android.gallery3d.util.ThreadPool; public class WidgetUtils { private static final String TAG = "WidgetUtils"; private static int sStackPhotoWidth = 220; private static int sStackPhotoHeight = 170; private WidgetUtils() { } public static void initialize(Context context) { Resources r = context.getResources(); sStackPhotoWidth = r.getDimensionPixelSize(R.dimen.stack_photo_width); sStackPhotoHeight = r.getDimensionPixelSize(R.dimen.stack_photo_height); } public static Bitmap createWidgetBitmap(MediaItem image) { Bitmap bitmap = image.requestImage(MediaItem.TYPE_THUMBNAIL) .run(ThreadPool.JOB_CONTEXT_STUB); if (bitmap == null) { Log.w(TAG, "fail to get image of " + image.toString()); return null; } return createWidgetBitmap(bitmap, image.getRotation()); } public static Bitmap createWidgetBitmap(Bitmap bitmap, int rotation) { int w = bitmap.getWidth(); int h = bitmap.getHeight(); float scale; if (((rotation / 90) & 1) == 0) { scale = Math.max((float) sStackPhotoWidth / w, (float) sStackPhotoHeight / h); } else { scale = Math.max((float) sStackPhotoWidth / h, (float) sStackPhotoHeight / w); } Bitmap target = Bitmap.createBitmap( sStackPhotoWidth, sStackPhotoHeight, Config.ARGB_8888); Canvas canvas = new Canvas(target); canvas.translate(sStackPhotoWidth / 2, sStackPhotoHeight / 2); canvas.rotate(rotation); canvas.scale(scale, scale); Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG); canvas.drawBitmap(bitmap, -w / 2, -h / 2, paint); return target; } }