Android开发中如何实现图片灰阶显示
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章将为大家详细讲解有关Android开发中如何实现图片灰阶显示,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。灰阶显示图片的典型应用就是用户头像,如用户在线头像
千家信息网最后更新 2025年02月23日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安全错误
数据库的锁怎样保障安全
联众网络技术有限责任公司
嵌入式软件开发控制程序文件
关于大学生网络安全作文
在网络安全和信息化方面
学校网络安全工作调研报告
自助购买服务器
计算机网络技术可以考大学
广告网络安全
数据库搜索字段
发达国家网络安全
nce软件开发工程师
重庆邮电大学计算机网络安全
东南大学网络安全等级
igex服务器繁忙
理正勘察怎样录入数据库
淄博软件开发哪家靠谱
杰拓服务器
文本 数据库 markdown
中国软件开发者
小潮的服务器地址
三星gear 软件开发
研究网络安全是什么
上海石娃互联网科技有限公司
开票可以开网络技术服务费么
迁西电子网络技术不二之选
网络安全手抄报上面写的字有哪些
微信电脑版 数据库
数据库表格能承受多少数据
银科控股软件开发怎么样
数据库语言考试2016年