Android开发中如何实现图片灰阶显示
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章将为大家详细讲解有关Android开发中如何实现图片灰阶显示,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。灰阶显示图片的典型应用就是用户头像,如用户在线头像
千家信息网最后更新 2026年10月31日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安全错误
数据库的锁怎样保障安全
瑰夏咖啡
互联网是第几次科技革命的成果
互联网科技财经
互联网是不是新科技
广州互联网科技公司
互联网金融与金融科技
金融科技 互联网金融
腾讯科技 互联网女皇
海南科技产业互联网平台
互联网科技公司招聘
中化能源互联网科技招聘
互联网科技与管理
昭通互联网科技选哪家
中国航天科技大学国际工业互联网
链环科技传统企业怎么转型互联网
科技互联网海报
梅州GM互联网络科技有限公司
中天科技中国工业互联网
江苏互联网科技小贷
伍佰万互联网科技是干嘛的
什么是科技互联网
兼蜜互联网科技
成都狮子座互联网科技
博兴的互联网电子科技公司
西藏七维空间互联网科技有限公司
广州新华互联网科技学校电竞方面
工业互联网展湾科技股份有限公司
每天都有哪些好的互联网科技
梅州GM互联网络科技有限公司
互联网对科技影响