反馈一个Color.fromHEX的bug

sin2d
Wed, 06 May 2026 13:37:09 +0000

反馈一个Bug

image708×490 21.8 KB

这个代码是有bug的。

不信你们可以试试
let color = Color.fromHex(new Color(), 0x000000ff);
按注释写，这里应该是RGBA格式，也就是黑色（不透明）

但实际你渲染出来，会发现是红色，为什么呢。
就是我框住的这个地方，当hex<0x1000000，就给补一个透明度a，但你没想过任何小于0x1000000的颜色都会受影响吗。

也就是当数字是0x000000ff，明明是黑色不透明，这里却认为是红色不带透明通道。

另外吐槽一下这个Color类乱七八糟的设计，fromHex是RGBA的格式，fromUint32又是ABGR的格式（甚至不是ARGB这种常见的格式）

搞得我查了半天才发现这里的格式是不统一的，等我统一处理后，发现还是有bug，才发现源代码就是有bug的…

阅读整个主题