Android Bitmap关于setPixel设置的值和getPixel获得的值不一样的问题
最近在写一个使用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获得的值不一样的问题相关推荐
- android 半透明色值_Android设置十六进制颜色不同透明度对应的值
六进制的颜色对应透明度如下: 100% - FF 95% - F2 90% - E6 85% - D9 80% - CC 75% - BF 70% - B3 65% - A6 60% - 99 55% ...
- Android Preference 调用setDefaultValue设置默认值不生效;应该使用setValueIndex
Android Preference 调用setDefaultValue设置默认值不生效:应该使用setValueIndex 如题,希望在ListPreference中设置一个默认值,且不能被设置为其 ...
- Android Bitmap 研究与思考(上篇)
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/107951273 本文出自[赵彦军的博客] 做Android 6年来,一直都没有对 ...
- Android—Bitmap图片大小计算、压缩与三级缓存
Bitmap对象占用内存大小: bitmap.getByteCount() 图片所占内存大小计算方式:图片长度 x 图片宽度 x 一个像素点占用的字节数. Android Bitmap使用的三种颜色格 ...
- Android Bitmap OutOfMemory 解决办法
Android Bitmap OutOfMemory 解决办法 置顶 2014年07月01日 14:41:22 阅读数:3072 标签: OutOfMemoryBitmapandroid图片优化更多 ...
- [Android] Bitmap OOM解决办法一
2019独角兽企业重金招聘Python工程师标准>>> 尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResou ...
- Android Bitmap(位图)详解
一.背景 在Android开发中,任何一个APP都离不开图片的加载和显示问题.这里的图片来源分为三种:项目图片资源文件(一般为res/drawable目录下的图片文件).手机本地图片文件.网络图片资源 ...
- Android运行时权限,设置帮助类BaseActivity;电话权限,短信权限,
Android运行时权限设置帮助类BaseActivity 一.电话权限 package com.glandroid.smssen ...
- Android Bitmap实战技巧
Android Bitmap实战技巧 http://www.cnblogs.com/punkisnotdead/p/4881771.html 注:本文大量参考谷歌官方文档自http://develop ...
最新文章
- xcode 中的iOS模拟器,home键快捷键
- phpjson多层乱码解决
- Asp.net网站的ClickOnce自动部署(2)-虚拟目录的配置
- 手撕FSG2.0壳(有坑点)
- 【LeetCode】35. 搜索插入位置(C++实现)
- java 进程同步代码_java 实现进程间的同步(源代码)
- django mysql settings
- 语言 高速公路超速处罚_880关注 拆除!高速公路不合理限速标志!
- oppo手机充电慢耗电快
- 8-5安装redis-sentinel
- [转]网店博客营销之微博实战技巧:还没有做微博的掌柜看过来
- html里面怎么引入swiper,JavaScript库——使用swiper.js创建嵌套的swiper
- Java多个PDF合成一个PDF的方法
- 世界上最畅销的JSON和XML编辑器-Altova XMLSpy 2021版发布,升级版JSON Grid View归来!
- JVM jclasslib使用
- 新斗罗大陆游戏怎么找回服务器,新斗罗大陆宗门战怎么打 新斗罗大陆手游宗门战打法技巧...
- SQL从特定位置检索记录
- 方舟建立服务器显示cmd,家庭电脑建方舟服务器
- c语言循环卖n西瓜 几天卖完,C++循环结构23道题含答案.docx
- 【嵌入式项目开源】基于ESP32的墨水屏桌面小屏幕