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