在网上搜了一些其它的方法,在这里分享下
1.Drawable—>Bitmap
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.sample_0);
2.Bitmap---->Drawable
Drawable drawable =new BitmapDrawable(bmp);
其他方法
1、Drawable → Bitmap
public static Bitmap drawableToBitmap(Drawable drawable)
{
Config config;
if (drawable.getOpacity() != PixelFormat.OPAQUE)
{
config = Bitmap.Config.ARGB_8888;
}
else
{
config = Bitmap.Config.RGB_565;
}
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
rawable.getIntrinsicHeight(),config);
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);
3、Bitmap → byte[]
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;
}
}
A R G B
透明度 红色 绿色 蓝色
Bitmap.Config ARGB_4444 每个像素 占四位
Bitmap.Config ARGB_8888 32 每个像素 占八位
Bitmap.Config RGB_565 16 R占5位 R 占6位 B占5位 没有透明度(A)
其实很简单嘛就跟double float 一样 你越到精度也就越到
但是一点主意点 一半情况下我们都是用argb888 但是无可厚非 它也相对的很占内存
因为一个像素32位 8位一个字节 如果是800*480的图片的话自己算 估计有1M多了
所以各位使用的时候悠着点 因为作为应用开发人员你使用的内存是有限的
1.Drawable—>Bitmap
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.sample_0);
2.Bitmap---->Drawable
Drawable drawable =new BitmapDrawable(bmp);
其他方法
1、Drawable → Bitmap
public static Bitmap drawableToBitmap(Drawable drawable)
{
Config config;
if (drawable.getOpacity() != PixelFormat.OPAQUE)
{
config = Bitmap.Config.ARGB_8888;
}
else
{
config = Bitmap.Config.RGB_565;
}
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
rawable.getIntrinsicHeight(),config);
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);
3、Bitmap → byte[]
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;
}
}
A R G B
透明度 红色 绿色 蓝色
Bitmap.Config ARGB_4444 每个像素 占四位
Bitmap.Config ARGB_8888 32 每个像素 占八位
Bitmap.Config RGB_565 16 R占5位 R 占6位 B占5位 没有透明度(A)
其实很简单嘛就跟double float 一样 你越到精度也就越到
但是一点主意点 一半情况下我们都是用argb888 但是无可厚非 它也相对的很占内存
因为一个像素32位 8位一个字节 如果是800*480的图片的话自己算 估计有1M多了
所以各位使用的时候悠着点 因为作为应用开发人员你使用的内存是有限的