/**
* 将bitmap转换成base64字符串
*
* @param bitmap
* @return base64 字符串
*/
public static String bitmap2String(Bitmap bitmap, int bitmapQuality) {
String string;
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, bitmapQuality, bStream);
byte[] bytes = bStream.toByteArray();
string = Base64.encodeToString(bytes, Base64.DEFAULT);
return string;
}
/**
* 将base64转换成bitmap图片
*
* @param string base64字符串
* @return bitmap
*/
public static Bitmap string2Bitmap(String string) {
Bitmap bitmap = null;
try {
byte[] bitmapArray;
bitmapArray = Base64.decode(string, Base64.DEFAULT);
bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0,
bitmapArray.length);
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
public static Bitmap resource2Bitmap(int id){
return BitmapFactory.decodeResource(getResources(),id);
}
/**
* drawable转化成bitmap
* @param drawable
* @return
*/
public static Bitmap drawable2Bitmap(Drawable drawable) {
int w = drawable.getIntrinsicWidth();
int h = drawable.getIntrinsicHeight();
System.out.println("Drawable转Bitmap");
Bitmap.Config config =
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565;
Bitmap bitmap = Bitmap.createBitmap(w, h, config);
//注意,下面三行代码要用到,否则在View或者SurfaceView里的canvas.drawBitmap会看不到图
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, w, h);
drawable.draw(canvas);
return bitmap;
}
/**
* bitmap转drawable
* @param bitmap
* @return
*/
public static Drawable bitmap2Drawable(Bitmap bitmap){
return new BitmapDrawable(bitmap);
}
/**
* bitmap转byte
* @param bitmap
* @return
*/
public static byte[] bitmap2Bytes(Bitmap bitmap){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
/**
* byte转bitmap
* @param b
* @return
*/
public static Bitmap bytes2Bimap(byte[] b) {
if (b.length != 0) {
return BitmapFactory.decodeByteArray(b, 0, b.length);
} else {
return null;
}
}
public static boolean bitmap2File(Bitmap bitmap, File file) {
boolean result = false;
FileOutputStream fos = null;
try {
File parentFile = file.getParentFile();
if (parentFile != null && !parentFile.exists()) {
parentFile.mkdirs();
}
fos = new FileOutputStream(file);
bitmap.compress(CompressFormat.PNG, 100, fos);
fos.flush();
result = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
public static Bitmap file2Bitmap(String path) {
return BitmapFactory.decodeFile(path);
}
为何要讲bitmap通过base64转化成string?
因为这样可以通过网络来传递图片信息,转化成byte也可以,不过经过base64会安全一些
bitmap转化成drawable通常是控件显示图片的时候用到,设置背景之类的,绘制图画
file和bitmap之间的转化就只要涉及到本地存储了,不多说
总的来说,bitmap是图片处理的中转状态,通过bitmap可以转化成其他各种形式的格式,其本质还是一张图