Android Bitmap常用代码片段
发布时间:2020-12-14 23:19:12 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 获取方式 /** 获取 drawable 的图片 可以循环 1.图名 2.drawable 3.包名 **/ int imgid = getResources().getIdentifier("ic_launcher","drawable","c
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 获取方式/** 获取 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,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)); // 发送位置和尺寸到View及其所有的子View rootView.layout(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,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,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,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,bitmap.getWidth(),bitmap.getHeight()); final RectF rectF = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0,0); paint.setColor(color); canvas.drawRoundRect(rectF,roundPx,paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap,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,height / 2,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,null); // Draw in the gap Paint defaultPaint = new Paint(); canvas.drawRect(0,height + reflectionGap,defaultPaint); // Draw in the reflection canvas.drawBitmap(reflectionImage,null); // Create a shader that is a linear gradient that covers the reflection Paint paint = new Paint(); LinearGradient shader = new LinearGradient(0,originalImage.getHeight(),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,paint); return bitmapWithReflection; } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |