public Bitmap ratio(String imgPath) {
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
float pixelW = dm.widthPixels;
float pixelH = dm.heightPixels;
BitmapFactory.Options newOpts = new BitmapFactory.Options();
// 开始读入图片,此时把options.inJustDecodeBounds 设回true,即只读边不读内容
newOpts.inJustDecodeBounds = true;
newOpts.inPreferredConfig = Config.RGB_565;
// Get bitmap info, but notice that bitmap is null now
Bitmap bitmap = BitmapFactory.decodeFile(imgPath, newOpts);
// newOpts.inJustDecodeBounds = false;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
// 想要缩放的目标尺寸
float hh = pixelH;// 设置高度,可以明显看到图片缩小了
float ww = pixelW;// 设置宽度,可以明显看到图片缩小了
// 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
int be = 1;// be=1表示不缩放
if (w > h && w > ww) {// 如果宽度大的话根据宽度固定大小缩放
be = (int) (newOpts.outWidth / ww);
} else if (w < h && h > hh) {// 如果高度高的话根据宽度固定大小缩放
be = (int) (newOpts.outHeight / hh);
}else if (w == h) {
be = (int) (newOpts.outHeight / hh);
}
if (be <= 1)
be = 1;
newOpts.inSampleSize = be;// 设置缩放比例
newOpts.inPurgeable = true;
newOpts.inJustDecodeBounds = false;
// 开始压缩图片,注意此时已经把options.inJustDecodeBounds 设回false了
// bitmap = BitmapFactory.decodeFile(imgPath, newOpts);
try {
// bitmap = BitmapFactory.decodeStream(new FileInputStream(new
// File(imgPath)), new Rect(),
// newOpts);
byte[] data = readStream(new FileInputStream(new File(imgPath)));
if (data != null) {
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, newOpts);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bitmap;
}
/*
* 得到图片字节流 数组大小
*/
public byte[] readStream(InputStream inStream) throws IOException {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
outStream.close();
inStream.close();
return outStream.toByteArray();
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
float pixelW = dm.widthPixels;
float pixelH = dm.heightPixels;
BitmapFactory.Options newOpts = new BitmapFactory.Options();
// 开始读入图片,此时把options.inJustDecodeBounds 设回true,即只读边不读内容
newOpts.inJustDecodeBounds = true;
newOpts.inPreferredConfig = Config.RGB_565;
// Get bitmap info, but notice that bitmap is null now
Bitmap bitmap = BitmapFactory.decodeFile(imgPath, newOpts);
// newOpts.inJustDecodeBounds = false;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
// 想要缩放的目标尺寸
float hh = pixelH;// 设置高度,可以明显看到图片缩小了
float ww = pixelW;// 设置宽度,可以明显看到图片缩小了
// 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
int be = 1;// be=1表示不缩放
if (w > h && w > ww) {// 如果宽度大的话根据宽度固定大小缩放
be = (int) (newOpts.outWidth / ww);
} else if (w < h && h > hh) {// 如果高度高的话根据宽度固定大小缩放
be = (int) (newOpts.outHeight / hh);
}else if (w == h) {
be = (int) (newOpts.outHeight / hh);
}
if (be <= 1)
be = 1;
newOpts.inSampleSize = be;// 设置缩放比例
newOpts.inPurgeable = true;
newOpts.inJustDecodeBounds = false;
// 开始压缩图片,注意此时已经把options.inJustDecodeBounds 设回false了
// bitmap = BitmapFactory.decodeFile(imgPath, newOpts);
try {
// bitmap = BitmapFactory.decodeStream(new FileInputStream(new
// File(imgPath)), new Rect(),
// newOpts);
byte[] data = readStream(new FileInputStream(new File(imgPath)));
if (data != null) {
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, newOpts);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bitmap;
}
/*
* 得到图片字节流 数组大小
*/
public byte[] readStream(InputStream inStream) throws IOException {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
outStream.close();
inStream.close();
return outStream.toByteArray();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
releaseImageViewResouce(photoView);
System.gc();
}
public static void releaseImageViewResouce(ImageView imageView) {
if (imageView == null)
return;
Drawable drawable = imageView.getDrawable();
if (drawable != null && drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
if (bitmap != null && !bitmap.isRecycled()) {
bitmap.recycle();
bitmap = null;
}
}
}