5

我的应用程序中有一些滑块允许用户更改 ARGB 颜色,但是我需要将这些值转换为十六进制值,如 0xff000000,即纯黑色。

这是我到目前为止所拥有的:

protected int toHex(Color col) {
    String as = pad(Integer.toHexString(col.getAlpha()));
    String rs = pad(Integer.toHexString(col.getRed()));
    String gs = pad(Integer.toHexString(col.getGreen()));
    String bs = pad(Integer.toHexString(col.getBlue()));
    String hex = "0x" + as + rs + gs + bs;
    return Integer.parseInt(hex, 16);
}

private static final String pad(String s) {
    return (s.length() == 1) ? "0" + s : s;
}

但是,在获得如下所示的整数值后,我得到了输入字符串的 NumberFormatException:“0xccffffff”:

int color = toHex(new Color(153f, 153f, 153f, 0.80f));

关于如何将其转换为整数的任何想法?谢谢。

4

2 回答 2

4

颜色参数必须在 1f 和 0f 之间浮动。所以这是一个有效的颜色:

int color = toHex(new Color(1f, 1f, 1f, 1f));

哪个是白色的。

于 2012-05-05T07:48:57.827 回答
0

问题是您包含了 alpha 值。所以你的最大颜色代码是#FFFFFFFF(8位)。

该方法Integer.parseInt将让您从-0x80000000to解析值0x7FFFFFFF。为了从中获得价值0xCC999999,您必须否定价值和输入-0x33666667- 这当然根本没有用。

笨重但稳定的解决方法是使用Long.

(int) Long.parseLong(text, 16)
于 2017-01-19T18:35:16.897 回答