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 代码的原始风格,并将返回正确的值。
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); }
TA贡献1786条经验 获得超13个赞
也许用 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
添加回答
举报