Java整数颜色扑动颜色并返回

Rob*_*hof 6 java flutter

我正在将我的应用程序从Java重建为扑朔迷离。我正在使用Firebase将颜色存储为整数值。在Java中,我可以使用以下代码将rgb值转换为整数值:

colorInt = (255 << 24) | (color.red << 16) | (color.green << 8) | color.blue;
Run Code Online (Sandbox Code Playgroud)

我可以使用以下内容将整数值转换为rgb:

int r = (colorInt >> 16) & 0xFF;
int g = (colorInt >> 8) & 0xFF;
int b = colorInt & 0xFF;
Run Code Online (Sandbox Code Playgroud)

如何将Java integercolor转换为颤动颜色并返回?

例如,以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
Run Code Online (Sandbox Code Playgroud)

在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;
Run Code Online (Sandbox Code Playgroud)

AKu*_*ior 1

因此,正如 @Ovidiu 提到的,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
}
Run Code Online (Sandbox Code Playgroud)

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