在项目中,我们拿到的网络图可能是透明的,但又要求我们显示白色背景。
当然处理的方法很多,如给控件添加背景色,或者通过两个控件叠加来显示等等,这里我记录我使用的别的方法。

方法1(此方法仅适用于纯色图片。相信我,不是纯色图片不要使用,不然上线后你可能要卷铺盖走人了):

变量每一个像素点,把对应的旧颜色替换为新的颜色

/*** 建议只能是纯色png图片,不然会造成图片像素或显示极度模糊* 将bitmap中的某种颜色值替换成新的颜色* @param oldBitmap* @param oldColor* @param newColor* @return*/public static Bitmap replaceBitmapColor(Bitmap oldBitmap,int oldColor,int newColor){//相关说明可参考 http://xys289187120.blog.51cto.com/3361352/657590/Bitmap mBitmap = oldBitmap.copy(Bitmap.Config.ARGB_8888, true);//循环获得bitmap所有像素点int mBitmapWidth = mBitmap.getWidth();int mBitmapHeight = mBitmap.getHeight();G.look("mBitmapWidth: "+mBitmapWidth);G.look("mBitmapHeight: "+mBitmapHeight);for (int i = 0; i < mBitmapHeight; i++) {for (int j = 0; j < mBitmapWidth; j++) {//获得Bitmap 图片中每一个点的color颜色值//将需要填充的颜色值如果不是//在这说明一下 如果color 是全透明 或者全黑 返回值为 0//getPixel()不带透明通道 getPixel32()才带透明部分 所以全透明是0x00000000//而不透明黑色是0xFF000000 如果不计算透明部分就都是0了int color = mBitmap.getPixel(j, i);//将颜色值存在一个数组中 方便后面修改if (color == oldColor) {mBitmap.setPixel(j, i, newColor);  //将白色替换成透明色}}}return mBitmap;}

调用利用Glide显示图片时调用该方法即可:

Glide.with(context).asBitmap().load(images.get(arg1)).into(new SimpleTarget<Bitmap>() {@Overridepublic void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {Bitmap bitmap = replaceBitmapColor(Color.TRANSPARENT,Color.WHITE);holder.image.setImageBitmap(bitmap);}});
方法2(利用jpg不透明的原则,先把图片转换成jpg下载到本地,再从本地读取显示并删除本地文件):

方法

 /*** 给透明图片添加白色底色,转换为jpg格式保存到本地后并获取本地图片并显示,然后删除本地图片* @param resource* @param view* @param url*/public static void saveAndGetImage(Bitmap resource,View view,String url,String type){//由于图片有透明背景,但又要求显示时添加白色背景。此处的处理://1.复制出一个新的Bitmap,然后给新的Bitmap添加一个白色的背景画布,然后把这个图转换为jpg下载到本地。//2.从手机本地取出该图片显示即可。File jpg = new File(C.getDownloadPath() + G.urlToFileName(url));Bitmap outB=resource.copy(Bitmap.Config.ARGB_8888,true); //复制出一个新的BitmapCanvas canvas=new Canvas(outB);   //给新的Bitmap 添加一个白色的画布canvas.drawColor(Color.WHITE);canvas.drawBitmap(resource, 0, 0, null);try {FileOutputStream out = new FileOutputStream(jpg); //保存到本地,格式为JPEGif (outB.compress(Bitmap.CompressFormat.JPEG, 100, out)) {out.flush();out.close();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}//从本地获取保存的图片并显示Bitmap bitmap = BitmapFactory.decodeFile(C.getDownloadPath() + G.urlToFileName(url),null);if (type.equals("PhotoView")){photoView = (PhotoView) view;photoView.setImageBitmap(bitmap);}//删除本地图片File file = new File(C.getDownloadPath() + G.urlToFileName(url));// 如果已经存在则不需要下载if (file != null && file.exists()) {file.delete();return;}}

调用:

Glide.with(context).asBitmap().load(images.get(arg1)).into(new SimpleTarget<Bitmap>() {@Overridepublic void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {Utils.saveAndGetImage(resource,holder.image,images.get(arg1),"PhotoView");}});

本来上面的这样耗时操作是不能放到主线程调用的。但是由于我们利用的是Glide来显示图片,Glide已经另外创建线程了,所以不用我们自己来弄。

Android 给透明png图片添加白色底色(修改像素点的形式)相关推荐

  1. PS学习记录-图片添加白色描边效果

    目录 效果展示 操作步骤 1.选取要描边的图像 2.编辑-描边选项 3.得到描边后的图片 效果展示 有时候,需要给图像增加一圈描边,让图像更有层次感(其实我个人感觉更像小时候的橡皮质感,哈哈哈),可以 ...

  2. 批量给透明图片添加纯色背景<matlab>

    保存了一些透明背景的表情包,在微信发送图片的时间遇到个小问题, 用电脑发送原图,在聊天界面显示图片底色是黑色, 用手机发送原图,在聊天界面显示图片底色是白色, 很难受,一开始想找个办法,使我发送的图片 ...

  3. android图像处理系列之五-- 给图片添加边框(中)

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

  4. Android开发笔记(九十八)往图片添加部件

    添加圆角 添加圆角的功能,要用到Canvas类的drawRoundRect方法,即把画布裁剪成指定的圆角矩形. 下面是给图片添加圆角的效果截图: 下面是给图片添加圆角的代码片段: public sta ...

  5. android 相册png黑底,Android png透明图片转jpg时背景变黑的解决方法

    在做view保存图片后,压缩格式转为jpg的时候出现了黑色背景,其根本原因在于透明背景时背景的情况下,转换为jpg的时候会变成黑色背景,原因是PNG支持透明图而 JPG格式不支持透明背景. 我们的解决 ...

  6. java png背景变黑,Android png透明图片转jpg时背景变黑的解决方法

    Android png透明图片转jpg时背景变黑的解决方法 发布时间:2020-09-01 07:36:28 来源:脚本之家 阅读:141 作者:康熙微博私访记 在做view保存图片后,压缩格式转为j ...

  7. android黑色背景图片,Android png透明图片转jpg时背景变黑的解决方法

    在做view保存图片后,压缩格式转为jpg的时候出现了黑色背景,其根本原因在于透明背景时背景的情况下,转换为jpg的时候会变成黑色背景,原因是PNG支持透明图而 JPG格式不支持透明背景. 我们的解决 ...

  8. android图像处理系列之五--给图片添加边框(中)

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

  9. android手机背景变黑怎么办,Android png透明图片转jpg时背景变黑的解决方法

    在做view保存图片后,压缩格式转为jpg的时候出现了黑色背景,其根本原因在于透明背景时背景的情况下,转换为jpg的时候会变成黑色背景,原因是PNG支持透明图而 JPG格式不支持透明背景. 我们的解决 ...

  10. Android 仿微信朋友圈添加图片

    github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...

最新文章

  1. R可视化包ggplot2设置轴范围
  2. gulp 与 Webpack 的 异曲同工之处
  3. pod 的亲和性,反亲和性 实验
  4. PHP只下载不打开文件
  5. Android客户端与服务器之间传递json数据
  6. 看完动画你还敢说不会 快速排序
  7. java网络图片与二进制字符串相互转换
  8. 组装电脑配置单报价_组装电脑配置单推荐,性价比高的游戏、画图和办公全能配置电脑!...
  9. 容易被PHP程序员忽视的几个要点
  10. php 给图片加水印
  11. SAP: Query创建教程
  12. C#中使用ribbon界面
  13. CentOS7 网络管理与配置
  14. 软考中级-数据库系统工程师复习知识点汇总
  15. Java实现 LeetCode 321 拼接最大数
  16. 测试电池耗电快的软件,电池快速耗电急救软件
  17. NVIDIA Jetson Xavier NX 刷机方法(sdk manager)
  18. vue图片加载完成前增加loading效果
  19. 8.8 json和文件操作
  20. MySQL数据备份命令

热门文章

  1. 万元怎样保留小数点_excel中数值转换成万元后如何只保留两位小数?,excle 万元 元...
  2. Science | 再野化植物微生物组——作物祖先微生物群可能为提高可持续的粮食生产提供了一种方法...
  3. [PTA]7-24 约分最简分式
  4. 什么是非接触式IC卡
  5. android设备刷机精灵,使用刷机精灵给安卓手机刷机教程
  6. 如何一天做出新闻搜索引擎(1)——新闻的搜集与数据库的建立
  7. 2021年个人年终总结
  8. 【电子知识摘要】合金电阻
  9. 如何实现用户名或密码错误,弹出重新登录的提示
  10. v-infinite-scroll懒惰加载