file转bitmap File param = new File();
Bitmap bitmap= BitmapFactory.decodeFile(param.getPath()); drawable转bitmap Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.mipmap.jcss_03 ); url转bitmap Bitmap bitmap; public Bitmap returnBitMap(final String url){
}
方法二:
public Bitmap getBitmap(String url) { Bitmap bm = null; try { URL iconUrl = new URL(url); URLConnection conn = iconUrl.openConnection(); HttpURLConnection http = (HttpURLConnection) conn;
}
可配合前台线程显示
private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case REFRESH_COMPLETE: myheadimage.setImageBitmap(bitmap);//显示 break; } } }; String imageUrl = "http://www.pp3.cn/uploads/201511/2015111212.jpg"; bitmap= returnBitMap(imageUrl); mHandler.sendEmptyMessageDelayed(REFRESH_COMPLETE, 1000); bitmap转file private String SAVE_PIC_PATH = Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED) ? Environment.getExternalStorageDirectory().getAbsolutePath() : "/mnt/sdcard";//
private String SAVE_REAL_PATH = SAVE_PIC_PATH + "/good/savePic";//保存的确 saveFile(bmp, System.currentTimeMillis() + ".png"); //保存方法 private void saveFile(Bitmap bm, String fileName) throws IOException { String subForder = SAVE_REAL_PATH; File foder = new File(subForder); if (!foder.exists()) foder.mkdirs();
// ToastUtil.showSuccess(getApplicationContext(), "已保存在/good/savePic目录下", Toast.LENGTH_SHORT); //发送广播通知系统 Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); Uri uri = Uri.fromFile(myCaptureFile); intent.setData(uri); this.sendBroadcast(intent); }
Uri转Bitmap public static Bitmap decodeUri(Context context, Uri uri, int maxWidth, int maxHeight) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; //只读取图片尺寸 readBitmapScale(context, uri, options);
}
‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’
频繁setImageBitmap引起oom问题解决方法 Glide.with(gsewmimg).load(getCodeBitmap(response.data.skip, R.mipmap.zhifuicon)).into(gsewmimg); 压缩前后。图片大小 2.22MB——>200KB
1、图片压缩方法:
Bitmap bitmap; byte[] buff; buff = Bitmap2Bytes(bitmap); BitmapFactory.Options ontain = new BitmapFactory.Options(); ontain.inSampleSize = 7;//值1为原图。值越大,压缩图片越小1-20 bitmap = BitmapFactory.decodeByteArray(buff, 0, buff.length, ontain);
压缩方法2:
int height = (int) ( mybitmap.getHeight() * (512.0 / mybitmap.getWidth()) ); mybitmap = Bitmap.createScaledBitmap(mybitmap, 512, height, true);
2、bitmap转byte
private byte[] Bitmap2Bytes(Bitmap bm) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); }
3、byte转bitmap
private Bitmap Bytes2Bimap(byte[] b) { if (b.length != 0) { return BitmapFactory.decodeByteArray(b, 0, b.length); } else { return null; } }
方法二,bitmap 转byte Bitmap frame = mCamera != null ? mCamera.Snapshot(mSelectedChannel) : null; frame = rotate(frame, 90); byte[] snapshot = getByteArrayFromBitmap(frame); if (snapshot!=null){ String imageString = new String(Base64.encode(snapshot,Base64.DEFAULT)); // LgqLogPlus.e("获取到imgstring保存了===== "+imageString); SharedPreUtil.putString(mDevUID,imageString); } public static byte[] getByteArrayFromBitmap(Bitmap bitmap) {
} byte转bitmap String imgstring = SharedPreUtil.getString(this,mDevUID); // LgqLogPlus.e("获取到imgstring==== "+imgstring); if (imgstring!=null){ byte[] bytsSnapshot = Base64.decode(imgstring.getBytes(), Base64.DEFAULT); Bitmap snapshot = (bytsSnapshot != null && bytsSnapshot.length > 0) ? getBitmapFromByteArray(bytsSnapshot) : null; bgimg.setImageBitmap(snapshot); } public static Bitmap getBitmapFromByteArray(byte[] byts) {
}
public static BitmapFactory.Options getBitmapOptions(int scale) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inPurgeable = true; options.inInputShareable = true; options.inSampleSize = scale;
} 旋转方法: //Rotate Bitmap public final static Bitmap rotate(Bitmap b, float degrees) { if (degrees != 0 && b != null) { Matrix m = new Matrix(); m.setRotate(degrees, (float) b.getWidth() / 2, (float) b.getHeight() / 2);
}
调用 bitmap = rotate(bitmap,90); 效果 选图
Android报错:Throwing OutOfMemoryError failed to allocate a 42793710 byte allocation with 52488 free by 在里加上android:hardwareAccelerated="false" 和 android:largeHeap="true"成功解决
Bitmap与String互转 Bitmap frame = BitmapFactory.decodeResource(getResources(),R.mipmap.iv_charge2 );
byte[] snapshot = getByteArrayFromBitmap(frame);
if (snapshot!=null){ String imageString = new String(Base64.encode(snapshot,Base64.DEFAULT));
}
工具:
public static byte[] getByteArrayFromBitmap(Bitmap bitmap) {
}
public static Bitmap getBitmapFromByteArray(byte[] byts) {
}
public static BitmapFactory.Options getBitmapOptions(int scale) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inPurgeable = true; options.inInputShareable = true; options.inSampleSize = scale;
} private static void readBitmapScale(Context context, Uri uri, BitmapFactory.Options options) { if (uri == null) { return; } String scheme = uri.getScheme(); if (ContentResolver.SCHEME_CONTENT.equals(scheme) || ContentResolver.SCHEME_FILE.equals(scheme)) { InputStream stream = null; try { stream = context.getContentResolver().openInputStream(uri); BitmapFactory.decodeStream(stream, null, options); } catch (Exception e) { Log.w("readBitmapScale", "Unable to open content: " + uri, e); } finally { if (stream != null) { try { stream.close(); } catch (IOException e) { Log.e("readBitmapScale", "Unable to close content: " + uri, e); } } } } else if (ContentResolver.SCHEME_ANDROID_RESOURCE.equals(scheme)) { Log.e("readBitmapScale", "Unable to close content: " + uri); } else { Log.e("readBitmapScale", "Unable to close content: " + uri); } }
private static Bitmap readBitmapData(Context context, Uri uri, BitmapFactory.Options options) { if (uri == null) { return null; } Bitmap bitmap = null; String scheme = uri.getScheme(); if (ContentResolver.SCHEME_CONTENT.equals(scheme) || ContentResolver.SCHEME_FILE.equals(scheme)) { InputStream stream = null; try { stream = context.getContentResolver().openInputStream(uri); bitmap = BitmapFactory.decodeStream(stream, null, options); } catch (Exception e) { Log.e("readBitmapData", "Unable to open content: " + uri, e); } finally { if (stream != null) { try { stream.close(); } catch (IOException e) { Log.e("readBitmapData", "Unable to close content: " + uri, e); } } } } else if (ContentResolver.SCHEME_ANDROID_RESOURCE.equals(scheme)) { Log.e("readBitmapData", "Unable to close content: " + uri); } else { Log.e("readBitmapData", "Unable to close content: " + uri); } return bitmap; }