读书人

android 图片有关帮助类

发布时间: 2012-09-04 14:19:30 作者: rapoo

android 图片相关帮助类

哈哈 在项目中看了些别人的图片缩放类,放出代码 以后用

?

/* * Copyright (C) 2010 Aspire *  * CommonUtil.java Version 1.0 * */package com.mid.market.util;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.Random;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.graphics.drawable.Drawable;import android.graphics.drawable.ShapeDrawable;import android.graphics.drawable.shapes.PathShape;import android.graphics.drawable.shapes.Shape;/** * @author x_liyajun * * 2010-10-24 ????10:40:46 *   * ImageUtil * */public class ImageUtil {    private static final float PHOTO_BORDER_WIDTH = 3.0f;    private static final int PHOTO_BORDER_COLOR = 0xffffffff;    private static final float ROTATION_ANGLE_MIN = 2.5f;    private static final float ROTATION_ANGLE_EXTRA = 5.5f;    public static final String  SDCARD_DIR="/sdcard/mid/";    private static final Random sRandom = new Random();    private static final Paint sPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);    private static final Paint sStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);    static {        sStrokePaint.setStrokeWidth(PHOTO_BORDER_WIDTH);        sStrokePaint.setStyle(Paint.Style.STROKE);        sStrokePaint.setColor(PHOTO_BORDER_COLOR);    }    /**     * 图片缩放     * @param bitmap     * @param width     * @param height     * @return     */   public  static Bitmap scaleAndFrame(Bitmap bitmap, int width, int height) {        final int bitmapWidth = bitmap.getWidth();        final int bitmapHeight = bitmap.getHeight();        final float scale = Math.min((float) width / (float) bitmapWidth,                 (float) height / (float) bitmapHeight);        final int scaledWidth = (int) (bitmapWidth * scale);        final int scaledHeight = (int) (bitmapHeight * scale);        final Bitmap decored = Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, true);        final Canvas canvas = new Canvas(decored);        final int offset = (int) (PHOTO_BORDER_WIDTH / 2);        sStrokePaint.setAntiAlias(false);        canvas.drawRect(offset, offset, scaledWidth - offset - 1,                scaledHeight - offset - 1, sStrokePaint);        sStrokePaint.setAntiAlias(true);        return decored;    }    /**     * 图片旋转     * @param bitmap     * @return     */   public static Bitmap rotateAndFrame(Bitmap bitmap) {        final boolean positive = sRandom.nextFloat() >= 0.5f;        final float angle = (ROTATION_ANGLE_MIN + sRandom.nextFloat() * ROTATION_ANGLE_EXTRA) *                (positive ? 1.0f : -1.0f);        final double radAngle = Math.toRadians(angle);        final int bitmapWidth = bitmap.getWidth();        final int bitmapHeight = bitmap.getHeight();        final double cosAngle = Math.abs(Math.cos(radAngle));        final double sinAngle = Math.abs(Math.sin(radAngle));        final int strokedWidth = (int) (bitmapWidth + 2 * PHOTO_BORDER_WIDTH);        final int strokedHeight = (int) (bitmapHeight + 2 * PHOTO_BORDER_WIDTH);        final int width = (int) (strokedHeight * sinAngle + strokedWidth * cosAngle);        final int height = (int) (strokedWidth * sinAngle + strokedHeight * cosAngle);        final float x = (width - bitmapWidth) / 2.0f;        final float y = (height - bitmapHeight) / 2.0f;        final Bitmap decored = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);        final Canvas canvas = new Canvas(decored);        canvas.rotate(angle, width / 2.0f, height / 2.0f);        canvas.drawBitmap(bitmap, x, y, sPaint);        canvas.drawRect(x, y, x + bitmapWidth, y + bitmapHeight, sStrokePaint);        return decored;    }   /**    * 从图片文件中读取图片,并返回缩略图    * @param fileName    * @param width 缩放图片的宽度    * @param height  高度    * @return    */   public static Bitmap getSamlBitmapFromFill(String fileName,int width, int height){   if(fileName.split("/").length<=1){   fileName =SDCARD_DIR+fileName;   }   Bitmap srcBitmap = BitmapFactory.decodeFile(fileName);   if(srcBitmap==null){   return null;   }   Bitmap destBitmap = scaleAndFrame(srcBitmap,width,height);   return destBitmap;   }   public static Bitmap genStar(int count){      return null;      }         public static Drawable getDrawable(String name) {       Drawable d = null;       FileInputStream fis = null;       String fileName = FileUtils.newFileName(name, "png");       if (!FileUtils.isExists(fileName)) {           return null;       }       try {           fis = new FileInputStream(fileName);           d = Drawable.createFromStream(fis, name);       } catch (FileNotFoundException e) {           // TODO Auto-generated catch block           e.printStackTrace();       } finally {           if (fis != null) {               try {                   fis.close();               } catch (IOException e) {                   // TODO Auto-generated catch block                   e.printStackTrace();               }               fis = null;           }       }       return d;   }//   public static Shape createPentacle(double sx,double sy,double radius,double theta){//       final float arc = (float) (Math.PI/5);//       final float rad = (float) (Math.sin(Math.PI/10)/Math.sin(3*Math.PI/10));//       Path path = new Path();//       path.moveTo(1,0);//       for(int idx = 0;idx < 5;idx ++){//           path.lineTo((float)(rad*Math.cos((1+2*idx)*arc)),(float)(rad*Math.sin((1+2*idx)*arc)));//           //           path.lineTo((float)(Math.cos(2*(idx+1)*arc)),(float)(Math.sin(2*(idx+1)*arc)));//       }//       path.close();//       ShapeDrawable mDrawable = new ShapeDrawable(new PathShape(path, 250, 250));//       mDrawable.getPaint().setColor(Color.YELLOW);//       return atf.createTransformedShape(path);//   } }
?

读书人网 >Android

热点推荐