哈哈 在项目中看了些别人的图片缩放类,放出代码 以后用
/* * 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); // } }