Bitmap用法总结

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);
	drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
			drawable.getIntrinsicHeight());
	drawable.draw(canvas);
	return bitmap;
}



R_drawable_launcher----Bitmap

Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.launcher);


Bitmap----byte[]

private byte[] Bitmap2Bytes(Bitmap bm) {
	ByteArrayOutputStream baos = new ByteArrayOutputStream();
	bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
<span style="white-space:pre">	</span>return baos.toByteArray();
}

byte[]----Bitmap

private Bitmap Bytes2Bimap(byte[] b) {
	if (b.length != 0) {
		return BitmapFactory.decodeByteArray(b, 0, b.length);
	} else {
		return null;
	}
}



保存Bitmap

public boolean saveBitmap2file(Bitmap bmp, String filename) {
	CompressFormat format = Bitmap.CompressFormat.JPEG;
	int quality = 100;
	OutputStream stream = null;
	try {
		stream = new FileOutputStream("/sdcard/" + filename);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	}
	return bmp.compress(format, quality, stream);
}


将图片按自己的要求缩放

public Bitmap zoomBmp() {
	// 图片源
	Bitmap bm = BitmapFactory.decodeStream(context.getResources()
			.openRawResource(R.drawable.ic_launcher));
	// 获得图片的宽高
	int width = bm.getWidth();
	int height = bm.getHeight();
	// 设置想要的大小
	int newWidth = 320;
	int newHeight = 480;
	// 计算缩放比例
	float scaleWidth = ((float) newWidth) / width;
	float scaleHeight = ((float) newHeight) / height;
	// 取得想要缩放的matrix参数
	Matrix matrix = new Matrix();
	matrix.postScale(scaleWidth, scaleHeight);
	// 得到新的图片
	Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix,
			true);
	return newbm;
}



放大缩小图片

public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {
	int width = bitmap.getWidth();
	int height = bitmap.getHeight();
	Matrix matrix = new Matrix();
	float scaleWidht = ((float) w / width);
	float scaleHeight = ((float) h / height);
	matrix.postScale(scaleWidht, scaleHeight);
	Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height,
			matrix, true);
	return newbmp;
}

有两个包中含有Matrix;
//import android.opengl.Matrix;
import android.graphics.Matrix;
这里使用的是android.graphics.Matrix;


圆角图片的方法

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {
	Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
			bitmap.getHeight(), Config.ARGB_8888);
	Canvas canvas = new Canvas(output);
	final int color = 0xff424242;
	final Paint paint = new Paint();
	final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
	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));//PorterDuffXfermode
	canvas.drawBitmap(bitmap, rect, rect, paint);
	return output;
}


获得带倒影的图片

public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {
	final int reflectionGap = 4;
	int width = bitmap.getWidth();
	int height = bitmap.getHeight();
	Matrix matrix = new Matrix();
	matrix.preScale(1, -1);
	Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height / 2,
			width, height / 2, matrix, false);
	Bitmap bitmapWithReflection = Bitmap.createBitmap(width,
			(height + height / 2), Config.ARGB_8888);
	Canvas canvas = new Canvas(bitmapWithReflection);
	canvas.drawBitmap(bitmap, 0, 0, null);
	Paint deafalutPaint = new Paint();
	canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);
	canvas.drawBitmap(reflectionImage, 0, height + 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, height, width, bitmapWithReflection.getHeight()
			+ reflectionGap, paint);
	return bitmapWithReflection;
}

转自:http://tonmly.blog.163.com/blog/static/174712856201171501256733/



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值