java代码
resources res = getresources();
bitmap bmp = bitmapfactory.decoderesource(res, r.drawable.icon);
public byte[] bitmap2bytes(bitmap bm) {
bytearrayoutputstream baos = new bytearrayoutputstream();
bm.compress(bitmap.compressformat.png, 100, baos);
return baos.tobytearray();
}
public bitmap bytes2bimap(byte[] b) {
if (b.length != 0) {
return bitmapfactory.decodebytearray(b, 0, b.length);
} else {
return null;
}
public static bitmap zoombitmap(bitmap bitmap, int width, int height) {
int w = bitmap.getwidth();
int h = bitmap.getheight();
matrix matrix = new matrix();
float scalewidth = ((float) width / w);
float scaleheight = ((float) height / h);
matrix.postscale(scalewidth, scaleheight);
bitmap newbmp = bitmap.createbitmap(bitmap, 0, 0, w, h, matrix, true);
return newbmp;
public static bitmap drawabletobitmap(drawable drawable) {
// 取 drawable 的长宽
int w = drawable.getintrinsicwidth();
int h = drawable.getintrinsicheight();
// 取 drawable 的颜色格式
bitmap.config config = drawable.getopacity() != pixelformat.opaque ? bitmap.config.argb_8888
: bitmap.config.rgb_565;
// 建立对应 bitmap
bitmap bitmap = bitmap.createbitmap(w, h, config);
// 建立对应 bitmap 的画布
canvas canvas = new canvas(bitmap);
drawable.setbounds(0, 0, w, h);
// 把 drawable 内容画到画布中
drawable.draw(canvas);
return bitmap;
public static bitmap getroundedcornerbitmap(bitmap bitmap, float roundpx) {
bitmap output = bitmap.createbitmap(w, h, config.argb_8888);
canvas canvas = new canvas(output);
final int color = 0xff424242;
final paint paint = new paint();
final rect rect = new rect(0, 0, w, h);
final rectf rectf = new rectf(rect);
paint.setantialias(true);
canvas.drawargb(0, 0, 0, 0);
paint.setcolor(color);
canvas.drawroundrect(rectf, roundpx, roundpx, paint);
paint.setxfermode(new porterduffxfermode(mode.src_in));
canvas.drawbitmap(bitmap, rect, rect, paint);
return output;
public static bitmap createreflectionimagewithorigin(bitmap bitmap) {
final int reflectiongap = 4;
matrix.prescale(1, -1);
bitmap reflectionimage = bitmap.createbitmap(bitmap, 0, h / 2, w,
h / 2, matrix, false);
bitmap bitmapwithreflection = bitmap.createbitmap(w, (h + h / 2),
config.argb_8888);
canvas canvas = new canvas(bitmapwithreflection);
canvas.drawbitmap(bitmap, 0, 0, null);
paint deafalutpaint = new paint();
canvas.drawrect(0, h, w, h + reflectiongap, deafalutpaint);
canvas.drawbitmap(reflectionimage, 0, h + reflectiongap, null);
paint paint = new paint();
lineargradient shader = new lineargradient(0, bitmap.getheight(), 0,
bitmapwithreflection.getheight() + reflectiongap, 0x70ffffff,
0x00ffffff, tilemode.clamp);
paint.setshader(shader);
// set the transfer mode to be porter duff and destination in
paint.setxfermode(new porterduffxfermode(mode.dst_in));
// draw a rectangle using the paint with our linear gradient
canvas.drawrect(0, h, w, bitmapwithreflection.getheight()
+ reflectiongap, paint);
return bitmapwithreflection;
bitmap bm=xxx; //xxx根据你的情况获取
bitmapdrawable bd= new bitmapdrawable(getresource(), bm);
因为btimapdrawable是drawable的子类,最终直接使用bd对象即可。
public static drawable zoomdrawable(drawable drawable, int w, int h) {
int width = drawable.getintrinsicwidth();
int height = drawable.getintrinsicheight();
// drawable转换成bitmap
bitmap oldbmp = drawabletobitmap(drawable);
// 创建操作图片用的matrix对象
// 计算缩放比例
float sx = ((float) w / width);
float sy = ((float) h / height);
// 设置缩放比例
matrix.postscale(sx, sy);
// 建立新的bitmap,其内容是对原bitmap的缩放后的图
bitmap newbmp = bitmap.createbitmap(oldbmp, 0, 0, width, height,
matrix, true);
return new bitmapdrawable(newbmp);