Paint对象float型alpha转int型的取值换算咨询
浮点型Alpha值适配Paint.setAlpha()的换算规则
核心换算逻辑
Paint.setAlpha() 接收的整型参数取值范围为0~255,其中0代表完全透明,255代表完全不透明,和通用的0f(完全透明)~1f(完全不透明)浮点alpha值是线性映射关系:
- 换算公式:整型alpha值 = 四舍五入(合法区间内的浮点alpha值 * 255)
- 注意:不要以256为基数做换算(即不要使用
floatAlpha * 256的公式),该方式会在边界值处产生越界问题,比如传入1f时计算值为256,超出了setAlpha()允许的最大值255。
0.5f对应的等价整型值计算
将0.5f代入公式计算可得:
- 理论等价值:
0.5f * 255 = 127.5 - 严格匹配的整型取值:对127.5做四舍五入得到
128,这个值对应的实际浮点alpha为128/255 ≈ 0.502,和目标0.5f的偏差在人眼感知阈值以下。
直接取127的效果偏差
直接取127作为入参时,对应的实际浮点alpha为127/255 ≈ 0.498,和目标0.5f的视觉差异几乎无法被人眼识别,日常开发中不会出现可感知的效果偏差。但从数值精度对齐的角度,128是更符合换算规则的取值。
通用转换实现
可复用如下代码完成任意浮点alpha的转换,同时自动做边界截断避免参数越界:
int convertAlpha(float floatAlpha) { // 限制alpha值在0f~1f的合法区间 float validAlpha = Math.max(0f, Math.min(1f, floatAlpha)); return Math.round(validAlpha * 255); }
内容的提问来源于stack exchange,提问作者inquisitivemongoose
相关产品推荐
相关产品推荐

