package com.weibo.sdk.android.util; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import android.graphics.BitmapFactory; import android.graphics.Rect; public final class BitmapHelper { /** * make sure the color data size not more than 5M * * @param rect * @return */ public static boolean makesureSizeNotTooLarge(Rect rect) { final int FIVE_M = 5 * 1024 * 1024; if ( rect.width() * rect.height() * 2 > FIVE_M ) { // 不能超过5M return false; } return true; } public static int getSampleSizeOfNotTooLarge( Rect rect ) { final int FIVE_M = 5 * 1024 * 1024; double ratio = ( ( double ) rect.width() ) * rect.height() * 2 / FIVE_M; return ratio >= 1 ? (int)ratio : 1; } /** * 自适应屏幕大小 得到最大的smapleSize * 同时达到此目标: 自动旋转 以适应view的宽高后, 不影响界面显示效果 * @param vWidth view width * @param vHeight view height * @param bWidth bitmap width * @param bHeight bitmap height * @return */ public static int getSampleSizeAutoFitToScreen( int vWidth, int vHeight, int bWidth, int bHeight ) { if( vHeight == 0 || vWidth == 0 ) { return 1; } int ratio = Math.max( bWidth / vWidth, bHeight / vHeight ); int ratioAfterRotate = Math.max( bHeight / vWidth, bWidth / vHeight ); return Math.min( ratio, ratioAfterRotate ); } /** * 检测是否可以解析成位图 * * @param datas * @return */ public static boolean verifyBitmap(byte[] datas) { return verifyBitmap(new ByteArrayInputStream(datas)); } /** * 检测是否可以解析成位图 * * @param input * @return */ public static boolean verifyBitmap(InputStream input) { if (input == null) { return false; } final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; input = input instanceof BufferedInputStream ? input : new BufferedInputStream(input); BitmapFactory.decodeStream(input, null, options); try { input.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return (options.outHeight > 0) && (options.outWidth > 0); } /** * 检测是否可以解析成位图 * * @param path * @return */ public static boolean verifyBitmap(String path) { try { return verifyBitmap(new FileInputStream(path)); } catch (final FileNotFoundException e) { e.printStackTrace(); } return false; } }