Android在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下:
1、Drawable → Bitmap
public static Bitmap drawableToBitmap(Drawable drawable) {
Bitmap bitmap = Bitmap
.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
//canvas.setBitmap(bitmap);
drawable.setBounds( 0 , 0 , drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}
2、从资源中获取Bitmap
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
3、Bitmap → byte[]
private byte [] Bitmap2Bytes(Bitmap bm){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100 , baos);
return baos.toByteArray();
}
private byte[] Bitmap2Bytes(Bitmap bm){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
4、 byte[] → Bitmap
private Bitmap Bytes2Bimap( byte [] b){
if (b.length!= 0 ){
return BitmapFactory.decodeByteArray(b, 0 , b.length);
}
else {
return null ;
}
1、Drawable → Bitmap
public static Bitmap drawableToBitmap(Drawable drawable) {
Bitmap bitmap = Bitmap
.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
//canvas.setBitmap(bitmap);
drawable.setBounds( 0 , 0 , drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}
2、从资源中获取Bitmap
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
3、Bitmap → byte[]
private byte [] Bitmap2Bytes(Bitmap bm){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100 , baos);
return baos.toByteArray();
}
private byte[] Bitmap2Bytes(Bitmap bm){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
4、 byte[] → Bitmap
private Bitmap Bytes2Bimap( byte [] b){
if (b.length!= 0 ){
return BitmapFactory.decodeByteArray(b, 0 , b.length);
}
else {
return null ;
}
}
1.创建数据库表的时候选择存图片的字段类型为blob
StringBuffer createTableOfHistory = new StringBuffer(); |
createTableOfHistory.append("CREATE TABLE "+某表名); |
createTableOfHistory.append(" ( _id INTEGER PRIMARY KEY AUTOINCREMENT ,"); |
createTableOfHistory.append(该存图片的字段名+" BLOB ,"); |
createTableOfHistory.append(其他字段名1+" TEXT ,"); |
....... |
createTableOfHistory.append(其他字段名n+" TEXT );");//记得这里带个“;”封号 |
db.execSQL(createTableOfHistory.toString());//执行该创表语句 |
2.存储数据
2.1将数据流转成数组的方法
InputStream inputStream = getResources().openRawResource(R.drawable.icon); |
private static byte[] streamToBytes(InputStream is) { |
ByteArrayOutputStream os = new ByteArrayOutputStream(1024); |
byte[] buffer = new byte[1024]; |
int len; |
try { |
while ((len = is.read(buffer)) >= 0) { |
os.write(buffer, 0, len); |
} |
} catch (java.io.IOException e) { |
} |
return os.toByteArray(); |
} |
2.2.将Bitmap对象转换成数组的方法【包含从资源文件中获得图片对象Bitmap】
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon); |
private static byte[] bitmapToBytes(Bitmap bitmap){ |
if (bitmap == null) { |
return null; |
} |
final ByteArrayOutputStream os = new ByteArrayOutputStream(); |
// 将Bitmap压缩成PNG编码,质量为100%存储 |
bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);//除了PNG还有很多常见格式,如jpeg等。 |
return os.toByteArray(); |
} |
|
ContentValues values = new ContentValues(); |
values.put(该存图片的字段名, readHistoryInfo.getBookIcon()); |
values.put(其他字段名1, “2011-05-17”); |
...... |
return mSqliteDatabase.insert(表名, null, values);//插入数据 |
3.提取数据库中的数组数据并转换成Bitmap或DrawableBitmap对象【包含byte[] —> Bitmap】
某类对象m(该类是负责创表,删表,插入数据,删除数据的类).openOrCreateDB();//openOrCreateDB()也是该类的一个打开或创建数据库的方法。
Cursor cursor = 某类对象m.getData(该存图片的字段名, null); |
if (cursor.moveToFirst()) { |
// byte[] —> Bitmap |
byte[] bytes = cursor.getBlob(cursor.getColumnIndex(该存图片的字段名)); |
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null); |
BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap); |
} |
4.Drawable —> Bitmap
Bitmap bm = xxx; //xxx根据你的情况获取 |
BitmapDrawable bd= new BitmapDrawable(bm); |
提示:因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。 |
public static Bitmap drawableToBitmap(Drawable drawable) { |
|
Bitmap bitmap = Bitmap.createBitmap( |
drawable.getIntrinsicWidth(), |
drawable.getIntrinsicHeight(), |
drawable.getOpacity() != PixelFormat.OPAQUE ? |
Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565); |
return bitmap; |
} |
Drawable d=xxx; //xxx根据自己的情况获取drawable |
BitmapDrawable bd = (BitmapDrawable) d; |
Bitmap bm = bd.getBitmap(); |
本文介绍Android中图片资源的各种转换方法,包括Drawable到Bitmap、资源文件到Bitmap、Bitmap到byte数组及反向转换等。同时提供了从数据库存储和读取图片的具体实现。
1104

被折叠的 条评论
为什么被折叠?



