gpt4 book ai didi

Java - 无法理解不透明度值 - 解析 64 位长的 float 并添加不透明度

转载 作者:行者123 更新时间:2023-12-02 10:05:45 25 4
gpt4 key购买 nike

我试图理解一些从原始颜色值创建不透明度值的代码。

    long fillColorValue = fillColor != null ? Long.parseLong(fillColor) : 0;
//Set opacity based on alpha
long alpha = fillColorValue >> 24;
float opacity = (alpha > 0 ? alpha / 255.0f : 1.0f);
shape.setFillOpacity(opacity);
  1. 首先将字符串颜色值解析为 long。
  2. 然后该值的位通过右移移动 24 位 - 为什么?

long alpha = fillColorValue >> 24;

  • 然后使用 long 来创建一个看似代表不透明度值的 float 。
  • float opacity = (alpha > 0 ? alpha / 255.0f : 1.0f);

    如果我能够清楚地了解这种定义不透明度的方法,那就太好了 - 这里实际发生了什么?

    形状填充颜色最初由字符串值-1751607581表示。

    最佳答案

    如果颜色以 32 位表示,就像您的示例所示,它看起来像是用一个 alpha channel 和三个颜色 channel 编码的,每个 channel 为 8 位(最有可能是 ARGB)。

    移位 >> 24 从而消除 RGB 分量,并将 Alpha channel 保持在低位。

    但是要小心有符号算术!如果原始字符串为负数,则 fillColorValue 将为负数,并且在算术 >> 移位后仍为负数...

    使用 alpha > 0 进行保护,结果是所有负或空 alpha 值都将被视为不透明。

    这意味着 128 到 255 之间不会有 alpha 值,因此开区间 ]0.5,1.0[ 中不会有 opacity 值。

    这听起来很奇怪。也许这就是真正的意图......或者也许颜色在打印到字符串时应该被解释为无符号?

    或者也许 alpha channel 中有 9 位,但是这将是一种非常不寻常的格式,而且我不认为浪费一半可能的值来编码单个不透明度值......它不会使很有道理。

    关于Java - 无法理解不透明度值 - 解析 64 位长的 float 并添加不透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55349418/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com