【发布时间】:2015-04-04 16:06:20
【问题描述】:
我正在使用BufferedImage(在 PNG 中)并想用另一种颜色替换一种颜色。
我将所有颜色都存储为字符串以便于处理,但是...
for(int x=0;x<output.getWidth();x++)
for(int y=0;y<output.getHeight();y++)
if(output.getRGB(x,y)==Integer.parseInt("ffff00fe",16))
output.setRGB(x,y,Integer.parseInt("ffaaaaaa",16));
结果整数应该是负数,但它会抛出NumberFormatException
当我执行output.getRGB(x,y) 时,它会在不透明像素上返回负数
【问题讨论】:
-
Convert hex string to int 的可能重复项
-
这些字符串是否来自外部来源?因为如果不是,只需使用十六进制文字
0xffff00fe和0xffaaaaaa -
即使没有,除非字符串每次都在循环中发生变化,否则最好将转换提升到循环之外。 (JIT 可能足够聪明,可以做到这一点,但我不会指望这一点。)如果您想查看这些像素的正(无符号)值,您也可以使用
Integer.toUnsignedString(output.getRGB(x, y))或Integer.toUnsignedString(output.getRGB(x, y), 16). -
0xffff00feis 解释为 32 位 int 时为负数。有什么问题?
标签: java numberformatexception parseint