android 图片转换
来源:互联网 发布:linux用户权限文件 编辑:程序博客网 时间:2024/06/07 04:02
本文将介绍几种Android常用的图片的转化方法
(一)bitmap转换成drawable
Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好。
Drawable - 作为Android平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变、图形等。
两者间的简单对比:
Drawable在内存占用和绘制速度这两个非常关键的点上胜过Bitmap;
public static Drawable bitmap2Drawable(Context context,Bitmap bitmap){ // 设置bitmap转成drawable后尺寸不变// DisplayMetrics metrics = new DisplayMetrics(); DisplayMetrics metrics = context.getApplicationContext().getResources().getDisplayMetrics();// ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(metrics); Resources resources = new Resources(context.getApplicationContext().getAssets(), metrics, null); // bitmap转drawable Drawable drawable = new BitmapDrawable(resources, bitmap); int scaleW = (int) (drawable.getIntrinsicWidth() / 2 * metrics.density); int scaleH = (int) (drawable.getIntrinsicHeight() / 2 * metrics.density); drawable.setBounds(0, 0, scaleW, scaleH); return drawable; }
(二)InputStream转换成Bitmap
InputStream的作用是标志那些从不同数据起源产生输入的类。这些数据起源包括(每个都有一个相关的InputStream子类)。
public static Bitmap InputStream2Bitmap(InputStream is) { BitmapFactory.Options opt = new Options(); opt.inTempStorage = new byte[100 * 1024]; opt.inPreferredConfig = Bitmap.Config.RGB_565; opt.inPurgeable = true; opt.inInputShareable = true; try { return BitmapFactory.decodeStream(is,null,opt); } catch (Exception e) { e.printStackTrace(); }catch (OutOfMemoryError e) { e.printStackTrace(); } return null; }
(三)Java生成 shape和select
public static StateListDrawable pressedAndEnabledBg(Drawable pressed,Drawable enabled, Drawable normal) { StateListDrawable drawable = new StateListDrawable(); drawable.addState(new int[] { android.R.attr.state_pressed }, pressed); drawable.addState(new int[] { android.R.attr.state_enabled }, enabled); drawable.addState(new int[] {}, normal); return drawable; } public static Drawable shapeDrawable(Context context, float radiussize, double strokewidth, String solidcolor, String strokecolor) { int dis = DensityUtil.dip2px(context, radiussize); float sw = (float) strokewidth; int strokeWidth = DensityUtil.dip2px(context, sw); // 3dp 边框宽度 int roundRadius = dis; // 8dp 圆角半径 int fillColor = null != solidcolor ? Color.parseColor(solidcolor) : Color.parseColor("#00000000");// 内部填充颜色 int strokeColor = null != strokecolor ? Color.parseColor(strokecolor) : Color.parseColor("#00000000");// 边框颜色 GradientDrawable gd = new GradientDrawable();// 创建drawable gd.setColor(fillColor); gd.setCornerRadius(roundRadius); gd.setStroke(strokeWidth, strokeColor); return gd; } public static Drawable shapeDrawable(Context context, int tlradiussize,int trradiussize,int blradiussize,int brradiussize, double strokewidth, String solidcolor, String strokecolor) { float tldis = DensityUtil.dip2px(context, tlradiussize); float trdis = DensityUtil.dip2px(context, trradiussize); float bldis = DensityUtil.dip2px(context, blradiussize); float brdis = DensityUtil.dip2px(context, brradiussize); float sw = (float) strokewidth; int strokeWidth = DensityUtil.dip2px(context, sw); // 3dp 边框宽度 int fillColor = null != solidcolor ? Color.parseColor(solidcolor) : Color.parseColor("#00000000");// 内部填充颜色 int strokeColor = null != strokecolor ? Color.parseColor(strokecolor) : Color.parseColor("#00000000");// 边框颜色 GradientDrawable gd = new GradientDrawable();// 创建drawable gd.setColor(fillColor); gd.setCornerRadii(new float[]{tldis,tldis,trdis,trdis,bldis,bldis,brdis,brdis}); gd.setStroke(strokeWidth, strokeColor); return gd; } public static Drawable shapeDrawable(Context context, int radiussize, double strokewidth, String solidcolor, String strokecolor,int dashGap,int dashWidth) { float sw = (float) strokewidth; int strokeWidth = DensityUtil.dip2px(context, sw); // 3dp 边框宽度 int fillColor = null != solidcolor ? Color.parseColor(solidcolor) : Color.parseColor("#00000000");// 内部填充颜色 int strokeColor = null != strokecolor ? Color.parseColor(strokecolor) : Color.parseColor("#00000000");// 边框颜色 GradientDrawable gd = new GradientDrawable();// 创建drawable gd.setColor(fillColor); gd.setCornerRadius(DensityUtil.dip2px(context, radiussize)); gd.setStroke(strokeWidth, strokeColor); gd.setStroke(strokeWidth, strokeColor, DensityUtil.dip2px(context, dashWidth), DensityUtil.dip2px(context, dashGap)); return gd; } public static Drawable shapeDrawable(Context context, int tlradiussize,int trradiussize,int blradiussize,int brradiussize, double strokewidth, String solidcolor, String strokecolor,int dashGap,int dashWidth) { float tldis = DensityUtil.dip2px(context, tlradiussize); float trdis = DensityUtil.dip2px(context, trradiussize); float bldis = DensityUtil.dip2px(context, blradiussize); float brdis = DensityUtil.dip2px(context, brradiussize); float sw = (float) strokewidth; int strokeWidth = DensityUtil.dip2px(context, sw); // 3dp 边框宽度 int fillColor = null != solidcolor ? Color.parseColor(solidcolor) : Color.parseColor("#00000000");// 内部填充颜色 int strokeColor = null != strokecolor ? Color.parseColor(strokecolor) : Color.parseColor("#00000000");// 边框颜色 GradientDrawable gd = new GradientDrawable();// 创建drawable gd.setColor(fillColor); gd.setCornerRadii(new float[]{tldis,tldis,trdis,trdis,bldis,bldis,brdis,brdis}); gd.setStroke(strokeWidth, strokeColor); gd.setStroke(strokeWidth, strokeColor, DensityUtil.dip2px(context, dashWidth), DensityUtil.dip2px(context, dashGap)); return gd; }
作者:叶晓晖:原文地址
阅读全文
0 0
- android图片转换代码
- Android图片对象转换
- Android图片对象转换
- Android图片转换
- android 图片转换
- Android图片转换字体
- android 图片转换
- android 图片转换
- android 图片转换
- android转换网络图片显示
- android 图片字节码转换
- Android图片资源转换代码
- Android中圆形图片转换
- android将图片转换为圆形图片
- Android Drawable和Bitmap图片之间转换
- Android Base64字符串转换成图片
- Android Bitmap转换以及图片的缩放
- (转)Android中图片转换、特效
- 解读JavaScript之this
- Linux内核:关于中断你需要知道的【转】
- Windows服务编程之服务程序
- #Unity坐标系,向量,四元数(一)
- mysql:cannnot create file navicatdesignquery.sql.bak 系统找不到指定路径
- android 图片转换
- 路由器端口映射
- [Hdu 3046]Pleasant sheep and big big wolf
- android OkHttp3.0介绍
- 重定向与转发的区别
- php require 和 include 的区别
- 基于native.js和html5的APP开发之消息推送
- MVC三层模型(struts+spring+hibernate)总结
- App Store 发布应用流程