博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Bitmap常用代码片段
阅读量:5937 次
发布时间:2019-06-19

本文共 7555 字,大约阅读时间需要 25 分钟。

  hot3.png

获取方式

        /** 获取 drawable 的图片 可以循环 1.图名 2.drawable 3.包名 **/		int imgid = getResources().getIdentifier("ic_launcher", "drawable", "com.example.anywight");		text.setBackgroundResource(imgid);		/** 通过图片id获得Bitmap **/		Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);		/** 通过 assest 获取 获得Drawable bitmap **/		InputStream in = this.getAssets().open("ic_launcher");		Drawable da = Drawable.createFromStream(in, null);		Bitmap mm = BitmapFactory.decodeStream(in);		/** 通过 sdcard 获得 bitmap **/		Bitmap bit = BitmapFactory.decodeFile("/sdcard/android.jpg");

常用操作

/** view转Bitmap **/	public static Bitmap convertViewToBitmap(View view, int bitmapWidth, int bitmapHeight) {		Bitmap bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);		view.draw(new Canvas(bitmap));		return bitmap;	}	/** 将控件转换为bitmap **/	public static Bitmap convertViewToBitMap(View view) {		// 打开图像缓存		view.setDrawingCacheEnabled(true);		// 必须调用measure和layout方法才能成功保存可视组件的截图到png图像文件		// 测量View大小		view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));		// 发送位置和尺寸到View及其所有的子View		view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());		// 获得可视组件的截图		Bitmap bitmap = view.getDrawingCache();		return bitmap;	}	public static Bitmap getBitmapFromView(View view) {		Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);		Canvas canvas = new Canvas(returnedBitmap);		Drawable bgDrawable = view.getBackground();		if (bgDrawable != null)			bgDrawable.draw(canvas);		else			canvas.drawColor(Color.WHITE);		view.draw(canvas);		return returnedBitmap;	}	/** 获取屏幕截图的bitmap对象的代码如下 **/	public Bitmap getScreenPic(View view) {		View rootView = view.getRootView();		rootView.setDrawingCacheEnabled(true);		rootView.buildDrawingCache();		// 不明白为什么这里返回一个空,有帖子说不能在oncreat方法中调用		// 测量View大小		rootView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));		// 发送位置和尺寸到View及其所有的子View		rootView.layout(0, 0, rootView.getMeasuredWidth(), rootView.getMeasuredHeight());		// 解决措施,调用上面的measure和layout方法之后,返回值就不再为空		// 如果想要创建的是固定长度和宽度的呢?		Bitmap bitmap = rootView.getDrawingCache();		rootView.destroyDrawingCache();		return 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);		// canvas.setBitmap(bitmap);		drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());		drawable.draw(canvas);		return bitmap;	}	/** bitmap → drawable **/	public static Drawable bitmapToDrawable(Context context, String filename) {		Bitmap image = null;		BitmapDrawable ddd = null;		try {			AssetManager am = context.getAssets();			InputStream is = am.open(filename);			image = BitmapFactory.decodeStream(is);			ddd = new BitmapDrawable(context.getResources(), image);			is.close();		} catch (Exception e) {		}		return ddd;	}	/** byte[] → Bitmap **/	public static Bitmap byteToDrawable(Context context, byte[] bb) {		Bitmap pp = BitmapFactory.decodeByteArray(bb, 0, bb.length);		return pp;	}	/** Bitmap → byte[] **/	public static byte[] bitmapToByte(Bitmap bitmap) {		ByteArrayOutputStream baos = new ByteArrayOutputStream();		bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);		byte[] yy = baos.toByteArray();		return yy;	}	/** 将text 转换成 bitmap **/	public static Bitmap createTxtImage(String txt, int txtSize) {		Bitmap mbmpTest = Bitmap.createBitmap(txt.length() * txtSize + 4, txtSize + 4, Config.ARGB_8888);		Canvas canvasTemp = new Canvas(mbmpTest);		Paint p = new Paint();		p.setAntiAlias(true);		p.setColor(Color.WHITE);		p.setTextSize(txtSize);		canvasTemp.drawText(txt, 2, txtSize - 2, p);		return mbmpTest;	}	/** 显示将bitmap进行缩放 **/	public Bitmap bitmapScanel(Context context) {		// 通过openRawResource获取一个inputStream对象		InputStream inputStream = context.getResources().openRawResource(R.id.backageground);		// 通过一个InputStream创建一个BitmapDrawable对象		BitmapDrawable drawable = new BitmapDrawable(inputStream);		// 通过BitmapDrawable对象获得Bitmap对象		Bitmap bitmap = drawable.getBitmap();		// 利用Bitmap对象创建缩略图		bitmap = ThumbnailUtils.extractThumbnail(bitmap, 40, 40);		return bitmap;	}	/** 放大缩小图片 **/	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;	}	/** 获得圆角图片的方法 **/	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));		canvas.drawBitmap(bitmap, rect, rect, paint);		return output;	}	/** 对 bitmap 进行裁剪 **/	public Bitmap bitmapClip(Context context, int id, int x, int y) {		Bitmap map = BitmapFactory.decodeResource(context.getResources(), id);		map = Bitmap.createBitmap(map, x, y, 120, 120);		return map;	}	/**	 * 图片的倒影效果	 */	public static Bitmap createReflectedImage(Bitmap originalImage) {		final int reflectionGap = 4;		int width = originalImage.getWidth();		int height = originalImage.getHeight();		Matrix matrix = new Matrix();		matrix.preScale(1, -1);		// Create a Bitmap with the flip matrix applied to it.		// We only want the bottom half of the image		Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height / 2, width, height / 2, matrix, false);		// Create a new bitmap with same width but taller to fit reflection		Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height / 2), Config.ARGB_8888);		// Create a new Canvas with the bitmap that's big enough for		// the image plus gap plus reflection		Canvas canvas = new Canvas(bitmapWithReflection);		// Draw in the original image		canvas.drawBitmap(originalImage, 0, 0, null);		// Draw in the gap		Paint defaultPaint = new Paint();		canvas.drawRect(0, height, width, height + reflectionGap, defaultPaint);		// Draw in the reflection		canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);		// Create a shader that is a linear gradient that covers the reflection		Paint paint = new Paint();		LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0, bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff,				TileMode.CLAMP);		// Set the paint to use this shader (linear gradient)		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;	}

转载于:https://my.oschina.net/yaly/blog/407374

你可能感兴趣的文章
C++当中的virtual继承
查看>>
手机H5显示一像素的细线
查看>>
Menu 菜单栏
查看>>
Integer跟int的区别(备份回忆)
查看>>
集合解析
查看>>
详解分布式应用程序协调服务Zookeeper
查看>>
windows下python2和python3共存
查看>>
奇幻RPG(人物构建 与 Abstract Factory模式)
查看>>
转JS技巧
查看>>
计划(持续更新)
查看>>
Python之几种常用模块
查看>>
二分查找
查看>>
.Net变量命名
查看>>
用R画海盗袭击区域的.gif图
查看>>
c#异步--async和await的使用
查看>>
MySQL学习(十二)
查看>>
Ubuntu 12.04 搭建TFTP服务器
查看>>
if语句
查看>>
234. Palindrome Linked List
查看>>
Webpack代理proxy配置,解决本地跨域调试问题,同时允许绑定host域名调试
查看>>