Android开发中如何实现图片灰阶显示
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章将为大家详细讲解有关Android开发中如何实现图片灰阶显示,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。灰阶显示图片的典型应用就是用户头像,如用户在线头像
千家信息网最后更新 2024年11月24日Android开发中如何实现图片灰阶显示
这篇文章将为大家详细讲解有关Android开发中如何实现图片灰阶显示,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
灰阶显示图片的典型应用就是用户头像,如用户在线头像显示彩色(原图),不在线显示灰色(黑白图)。总结一点就是更加一张原始图片来通过颜色的过滤处理计算得到不同显示效果的图片。这方法的API主要位于:android.
使用上文中提到的"三种算法转换彩色灰阶"一文中提到的灰阶计算方法产生的黑白图片显示效果如下图:
说明:通过Use Matrix是使用Android的ColorMatrix和ColorFilter实现,其中设置ColorMatrix的setSaturation(float sat)饱和度设置为0时颜色过滤之后显示灰阶,android.graphics.ColorMatrix的内部实现和具体RGB颜色权重值近似等于图中BT709中的权重。
代码示例(依赖此文中附加的灰阶计算方法封装类)
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_grayscale); ButterKnife.bind(this); BitmapDrawable bd = (BitmapDrawable) Original_ImageView.getDrawable(); Bitmap bitmap = bd.getBitmap(); Log.d(TAG, " w=" + bitmap.getWidth() + ", h=" + bitmap.getHeight() + ", c=" + bitmap.getConfig().toString()); //0 BT709 Bitmap matrix = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(matrix); Paint paint = new Paint(); ColorMatrix colorMatrix = new ColorMatrix(); //传入一个大于1的数字将增加饱和度,而传入一个0~1之间的数字会减少饱和度。0值将产生一幅灰度图像 //Android ColorMatrix 默认的灰阶计算采用下面的BT709标准 colorMatrix.setSaturation(0f); ColorMatrixColorFilter colorMatrixColorFilter = new ColorMatrixColorFilter(colorMatrix); paint.setColorFilter(colorMatrixColorFilter); canvas.drawBitmap(bitmap, 0f, 0f, paint); Matrix_ImageView.setImageBitmap(matrix); //原始图片 Bitmap sunflower = XUtils.BitmapUtil.decodeMutableBitmapFromResourceId(this, R.drawable.sunflower); //1 Bitmap lightness = grayScale(sunflower, XUtils.GrayScaleUtil.GrayScale.Lightness); Lightness_ImageView.setImageBitmap(lightness); //2 Bitmap average = grayScale(sunflower, XUtils.GrayScaleUtil.GrayScale.Average); Average_ImageView.setImageBitmap(average); //3 Bitmap luminosity = grayScale(sunflower, XUtils.GrayScaleUtil.GrayScale.Luminosity); Luminosity_ImageView.setImageBitmap(luminosity); //4 Bitmap bt709 = grayScale(sunflower, XUtils.GrayScaleUtil.GrayScale.BT709); BT709_ImageView.setImageBitmap(bt709); //5 Bitmap rmy = grayScale(sunflower, XUtils.GrayScaleUtil.GrayScale.RMY); RMY_ImageView.setImageBitmap(rmy); //6 Bitmap y = grayScale(sunflower, XUtils.GrayScaleUtil.GrayScale.Y); Y_ImageView.setImageBitmap(y); } public Bitmap grayScale(final Bitmap bitmap, XUtils.GrayScaleUtil.GrayScale grayScale) { if (null == bitmap || null == grayScale) { return null; } Bitmap rs = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(rs); Paint paint = new Paint(); for (int x = 0, w = bitmap.getWidth(); x < w; x++) { for (int y = 0, h = bitmap.getHeight(); y < h; y++) { int c = bitmap.getPixel(x, y); int a = Color.alpha(c); int r = Color.red(c); int g = Color.red(c); int b = Color.blue(c); int gc = grayScale.grayScale(r, g, b); paint.setColor(Color.argb(a, gc, gc, gc)); canvas.drawPoint(x, y, paint); } } return rs; }
关于"Android开发中如何实现图片灰阶显示"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
图片
篇文章
颜色
饱和度
饱和
开发
原始
头像
就是
彩色
效果
数字
方法
更多
权重
用户
黑白
在线
不同
不错
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全卫士守护
计算网络技术的新应用包括哪些
江苏云服务器选择云空间
数据库跟踪技术查表名
威力网络技术哪家好
关注网络安全健康文明上网手抄报
广智发软件开发公司
南京进口软件开发费用
数据库管理技术主要有三种模型
诺亚传说服务器人数
机器视频用什么软件开发
网络安全工程师分为几种
关闭360服务器安全防护
网络安全法网络入侵
网络安全班会幼儿教案
软件开发及服务概念股
数据库一体机排行
数据库执行超时
铁威马f2221有服务器吗
趣睡科技互联网
新手机id怎么无法连接服务器
漯河网络安全宣传周
云服务器的安全组
物种智能数据库招标
关于网络安全谣言的视频
郑恺软件开发电视剧
公安网络安全监控中心
吕梁微蚁付网络技术有限公司
数据库的完整性指
软件开发留言