content: package com.rsen.effect;
  
  import android.app.Activity;
  import android.content.Context;
  import android.content.res.Resources;
  import android.graphics.Bitmap;
  import android.graphics.Bitmap.Config;
  import android.graphics.BitmapFactory;
  import android.graphics.Canvas;
  import android.graphics.Rect;
  import android.util.DisplayMetrics;
  import android.util.TypedValue;
  import android.view.View;
  
  public class ViewUtils {
      private static int width;
      private static int height;
  
      public static void init(Context context) {
          Resources res = context.getResources();
          DisplayMetrics metrics = res.getDisplayMetrics();
          width = metrics.widthPixels;
          height = metrics.heightPixels;
      }
  
      public static int getScreenWidth() {
          return width;
      };
  
      public static int getScreenHeight() {
          return height;
      };
  
      /**
       * change dip value to pixel value for certain screen size
       * 
       * @param dipValue
       * @param context
       * @return
       */
      public static int getPixels(int dipValue, Context context) {
          int result = 0;
          Resources res = context.getResources();
          result = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, res.getDisplayMetrics());
          return result;
      }
  
      /**
       * change View to Bitmap Object
       * 
       * @param v
       * @return
       */
      public static Bitmap loadBitmapFromView(View v) {
          if (v == null) {
              return null;
          }
          Bitmap screenshot;
          screenshot = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Config.ARGB_8888);
          Canvas c = new Canvas(screenshot);
          c.translate(-v.getScrollX(), -v.getScrollY());
          v.draw(c);
          return screenshot;
      }
  
      /**
       * compute sample size you want
       * 
       * @param options
       * @param minSideLength
       * @param maxNumOfPixels
       * @return
       */
      public static int computeSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) {
          int initialSize = computeInitialSampleSize(options, minSideLength, maxNumOfPixels);
          int roundedSize;
          if (initialSize <= 8) {
              roundedSize = 1;
              while (roundedSize < initialSize) {
                  roundedSize <<= 1;
              }
          } else {
              roundedSize = (initialSize + 7) / 8 * 8;
          }
          return roundedSize;
      }
  
      /**
       * compute bitmap initial sample size
       * 
       * @param options
       * @param minSideLength
       * @param maxNumOfPixels
       * @return
       */
      private static int computeInitialSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) {
          double w = options.outWidth;
          double h = options.outHeight;
          int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));
          int upperBound = (minSideLength == -1) ? 128 : (int) Math.min(Math.floor(w / minSideLength), Math.floor(h / minSideLength));
          if (upperBound < lowerBound) {
              // return the larger one when there is no overlapping zone.
              return lowerBound;
          }
          if ((maxNumOfPixels == -1) && (minSideLength == -1)) {
              return 1;
          } else if (minSideLength == -1) {
              return lowerBound;
          } else {
              return upperBound;
          }
      }
  
      public static int getStatusBarHeight(Activity context) {
          Rect rect = new Rect();
          context.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
          return rect.top;
      }
  }
  