为了账号安全,请及时绑定邮箱和手机立即绑定

java整数颜色到颤动颜色并返回

java整数颜色到颤动颜色并返回

德玛西亚99 2023-12-13 16:54:56
我正在将我的应用程序从 java 重建为 flutter。我使用 firebase 将颜色存储为整数值。在java中,我可以使用以下命令将rgb值转换为整数值:colorInt = (255 << 24) | (color.red << 16) | (color.green << 8) | color.blue;我可以使用以下命令将整数值转换为 RGB:int r = (colorInt >> 16) & 0xFF;int g = (colorInt >> 8) & 0xFF;int b = colorInt & 0xFF;如何将 Java 整数颜色转换为颤动颜色并返回?举个例子,以 RGB 154、255、147 为例在颤振中,结果是 4288348051(255 << 24) | (154 << 16) | (255 << 8) | 147;(4278190080) | (10092544) | (65280) | 147;(4278190080) | (10092544) = 4288282624;(4278190080) | (10092544) | (65280) = 4288347904;(4278190080) | (10092544) | (65280) | 147 = 4288348051在java中这将是-6619245(255 << 24) | (154 << 16) | (255 << 8) | 147;(-16777216) | (10092544) | (65280) | 147;(-16777216) | (10092544) = -6684672;(-16777216) | (10092544) | (65280) = -6619392;(-16777216) | (10092544) | (65280) | 147 = -6619245;
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

Java 使用有符号的 32 位整数。扩展他们发布的代码块,我们可以创建一个完整的示例,它可以满足我们的需要:


import 'dart:math';


int chopToJavaInt (int result) {

  while (result > pow(2, 31)) {

    result = result - pow(2, 32);

  }

  return result;

}


int javaIntColor(int r, int g, int b) {

  var x = (g << 24) | (r << 16) | (g << 8) | b;

  return chopToJavaInt(x);

}


void main () {

  print(javaIntColor(154, 255, 147)); //-6619245

}

该解决方案是模块化的,保留了 Java 代码的原始风格,并将返回正确的值。


查看完整回答
反对 回复 2023-12-13
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

Java 使用有符号 32 位 int,因此值介于 -2^31 和 2^31 之间。一旦达到 2^31,它们就会从 -1 继续到 -2^31。

尝试将此应用于您在 Flutter 中获得的结果:

if (result > pow(2, 31)) {
  result = result - pow(2, 32);
}


查看完整回答
反对 回复 2023-12-13
?
开满天机

TA贡献1786条经验 获得超12个赞

也许用 1 填充高位数字?


    int rgb = -6619245;

    final c = Color(rgb);

    print('${c.red} ${c.green} ${c.blue}');

    int fromColorRgb = c.value | 0xFFFFFFFF00000000;

    print('$rgb : $fromColorRgb');

结果:


I/flutter (10689): 154 255 147

I/flutter (10689): -6619245 : -6619245

假设您的 Alpha 通道始终为 255


查看完整回答
反对 回复 2023-12-13
  • 3 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信