Home | History | Annotate | Download | only in gadget
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.gallery3d.gadget;
     18 
     19 import android.content.Context;
     20 import android.content.res.Resources;
     21 import android.graphics.Bitmap;
     22 import android.graphics.Bitmap.Config;
     23 import android.graphics.Canvas;
     24 import android.graphics.Paint;
     25 import android.util.Log;
     26 
     27 import com.android.gallery3d.R;
     28 import com.android.gallery3d.data.MediaItem;
     29 import com.android.gallery3d.util.ThreadPool;
     30 
     31 public class WidgetUtils {
     32 
     33     private static final String TAG = "WidgetUtils";
     34 
     35     private static int sStackPhotoWidth = 220;
     36     private static int sStackPhotoHeight = 170;
     37 
     38     private WidgetUtils() {
     39     }
     40 
     41     public static void initialize(Context context) {
     42         Resources r = context.getResources();
     43         sStackPhotoWidth = r.getDimensionPixelSize(R.dimen.stack_photo_width);
     44         sStackPhotoHeight = r.getDimensionPixelSize(R.dimen.stack_photo_height);
     45     }
     46 
     47     public static Bitmap createWidgetBitmap(MediaItem image) {
     48         Bitmap bitmap = image.requestImage(MediaItem.TYPE_THUMBNAIL)
     49                .run(ThreadPool.JOB_CONTEXT_STUB);
     50         if (bitmap == null) {
     51             Log.w(TAG, "fail to get image of " + image.toString());
     52             return null;
     53         }
     54         return createWidgetBitmap(bitmap, image.getRotation());
     55     }
     56 
     57     public static Bitmap createWidgetBitmap(Bitmap bitmap, int rotation) {
     58         int w = bitmap.getWidth();
     59         int h = bitmap.getHeight();
     60 
     61         float scale;
     62         if (((rotation / 90) & 1) == 0) {
     63             scale = Math.max((float) sStackPhotoWidth / w,
     64                     (float) sStackPhotoHeight / h);
     65         } else {
     66             scale = Math.max((float) sStackPhotoWidth / h,
     67                     (float) sStackPhotoHeight / w);
     68         }
     69 
     70         Bitmap target = Bitmap.createBitmap(
     71                 sStackPhotoWidth, sStackPhotoHeight, Config.ARGB_8888);
     72         Canvas canvas = new Canvas(target);
     73         canvas.translate(sStackPhotoWidth / 2, sStackPhotoHeight / 2);
     74         canvas.rotate(rotation);
     75         canvas.scale(scale, scale);
     76         Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG);
     77         canvas.drawBitmap(bitmap, -w / 2, -h / 2, paint);
     78         return target;
     79     }
     80 }
     81