最近在写一个使用rgb颜色通道的逻辑,需要导出一张1*256的纹理,将每个通道的映射放在纹理上面,除了rgb三个通道之外还需要一个总的通道,这个通道可以用来调节亮度,于是把这个通道的映射放在Bitmap的a值里,坑的事情发生了,我发现使用这张纹理进行颜色查找的时候颜色整体变暗了,说明导出来的这张纹理是有问题的,经过Debug发现,使用Bitmap的setPixel设置的值,用getPixel获得的时候不一定相等,这是因为Bimap默认对颜色做了一个预乘的操作

     int colorA, colorB;Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);int colo = 0x00252525;ArrayList<String> result = new ArrayList<>();for (int i = 0; i < 256; i+= 8) {bitmap.setPremultiplied(true);bitmap.setPixel(0, 0, colo | i << 24);colorA = bitmap.getPixel(0, 0);bitmap.setPremultiplied(false);bitmap.setPixel(0, 0, colo | i << 24);colorB = bitmap.getPixel(0, 0);result.add("colorA = " + Integer.toHexString(colorA) + " colorB = " + Integer.toHexString(colorB));}for (int i = 0; i < result.size(); i++) {System.out.println(result.get(i));}

输出

colorA = 0 colorB = 252525
colorA = 8202020 colorB = 8252525
colorA = 10202020 colorB = 10252525
colorA = 18202020 colorB = 18252525
colorA = 20282828 colorB = 20252525
colorA = 28262626 colorB = 28252525
colorA = 30252525 colorB = 30252525
colorA = 38242424 colorB = 38252525
colorA = 40242424 colorB = 40252525
colorA = 48232323 colorB = 48252525
colorA = 50262626 colorB = 50252525
colorA = 58262626 colorB = 58252525
colorA = 60252525 colorB = 60252525
colorA = 68252525 colorB = 68252525
colorA = 70242424 colorB = 70252525
colorA = 78242424 colorB = 78252525
colorA = 80262626 colorB = 80252525
colorA = 88262626 colorB = 88252525
colorA = 90252525 colorB = 90252525
colorA = 98252525 colorB = 98252525
colorA = a0252525 colorB = a0252525
colorA = a8242424 colorB = a8252525
colorA = b0262626 colorB = b0252525
colorA = b8252525 colorB = b8252525
colorA = c0252525 colorB = c0252525
colorA = c8252525 colorB = c8252525
colorA = d0252525 colorB = d0252525
colorA = d8252525 colorB = d8252525
colorA = e0262626 colorB = e0252525
colorA = e8252525 colorB = e8252525
colorA = f0252525 colorB = f0252525
colorA = f8252525 colorB = f8252525

如果我们要求setPixel设置的值和getPixel获得的值一致的话,可以看到前面几组数据的colorA是很不正常的,在开发滤镜算法的时候如果用到a通道的话有可能会遇到这个问题,可以使用

bitmap.setPremultiplied(false);

这段代码把预乘操作禁用,要注意,把预乘操作禁用之后,和Canvas相关的一些Bitmap操作可能会出问题

Android Bitmap关于setPixel设置的值和getPixel获得的值不一样的问题相关推荐

  1. android 半透明色值_Android设置十六进制颜色不同透明度对应的值

    六进制的颜色对应透明度如下: 100% - FF 95% - F2 90% - E6 85% - D9 80% - CC 75% - BF 70% - B3 65% - A6 60% - 99 55% ...

  2. Android Preference 调用setDefaultValue设置默认值不生效;应该使用setValueIndex

    Android Preference 调用setDefaultValue设置默认值不生效:应该使用setValueIndex 如题,希望在ListPreference中设置一个默认值,且不能被设置为其 ...

  3. Android Bitmap 研究与思考(上篇)

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/107951273 本文出自[赵彦军的博客] 做Android 6年来,一直都没有对 ...

  4. Android—Bitmap图片大小计算、压缩与三级缓存

    Bitmap对象占用内存大小: bitmap.getByteCount() 图片所占内存大小计算方式:图片长度 x 图片宽度 x 一个像素点占用的字节数. Android Bitmap使用的三种颜色格 ...

  5. Android Bitmap OutOfMemory 解决办法

    Android Bitmap OutOfMemory 解决办法 置顶 2014年07月01日 14:41:22 阅读数:3072 标签: OutOfMemoryBitmapandroid图片优化更多 ...

  6. [Android] Bitmap OOM解决办法一

    2019独角兽企业重金招聘Python工程师标准>>> 尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResou ...

  7. Android Bitmap(位图)详解

    一.背景 在Android开发中,任何一个APP都离不开图片的加载和显示问题.这里的图片来源分为三种:项目图片资源文件(一般为res/drawable目录下的图片文件).手机本地图片文件.网络图片资源 ...

  8. Android运行时权限,设置帮助类BaseActivity;电话权限,短信权限,

                                      Android运行时权限设置帮助类BaseActivity  一.电话权限 package com.glandroid.smssen ...

  9. Android Bitmap实战技巧

    Android Bitmap实战技巧 http://www.cnblogs.com/punkisnotdead/p/4881771.html 注:本文大量参考谷歌官方文档自http://develop ...

最新文章

  1. xcode 中的iOS模拟器,home键快捷键
  2. phpjson多层乱码解决
  3. Asp.net网站的ClickOnce自动部署(2)-虚拟目录的配置
  4. 手撕FSG2.0壳(有坑点)
  5. 【LeetCode】35. 搜索插入位置(C++实现)
  6. java 进程同步代码_java 实现进程间的同步(源代码)
  7. django mysql settings
  8. 语言 高速公路超速处罚_880关注 拆除!高速公路不合理限速标志!
  9. oppo手机充电慢耗电快
  10. 8-5安装redis-sentinel
  11. [转]网店博客营销之微博实战技巧:还没有做微博的掌柜看过来
  12. html里面怎么引入swiper,JavaScript库——使用swiper.js创建嵌套的swiper
  13. Java多个PDF合成一个PDF的方法
  14. 世界上最畅销的JSON和XML编辑器-Altova XMLSpy 2021版发布,升级版JSON Grid View归来!
  15. JVM jclasslib使用
  16. 新斗罗大陆游戏怎么找回服务器,新斗罗大陆宗门战怎么打 新斗罗大陆手游宗门战打法技巧...
  17. SQL从特定位置检索记录
  18. 方舟建立服务器显示cmd,家庭电脑建方舟服务器
  19. c语言循环卖n西瓜 几天卖完,C++循环结构23道题含答案.docx
  20. 【嵌入式项目开源】基于ESP32的墨水屏桌面小屏幕

热门文章

  1. PHP二维数组用某个字段的值当做键名
  2. 一对一视频直播源码|手机视频直播平台android源码/可打包视频直播
  3. mysql 表名 下划线_我们可以在MySQL表名中加下划线吗?
  4. CDC *pDC=GetDC();具体是什么意思?
  5. python中用pygame创建一个精致的窗口
  6. 统计字母个数(java语言实现)
  7. 荣耀开发者关怀月邂逅1024程序员节,请开发者喝咖啡
  8. DAX :表值函数 ADDCOLUMNS 和 SELECTCOLUMNS
  9. 强化学习入坑之路04
  10. 我的摩旅经验分享之致新入坑摩旅的老同学刘