2
这是我的代码,用Java编写。它获取图像并逐个更改像素,直到达到图像的最后一个像素,然后将图像写出。我上线67得到一个例外的ArrayIndexOutOfBounds,在那里我宣布一个新的Color对象:创建新对象时ArrayIndexOutOfBounds?
Color pixel = new Color(image.getRGB(j,i));
我使用UNIX为一类,以及这个代码,如果该信息相关。任何想法发生了什么?
public class SecretDecoder
{
public static void main(String[] args)
{
try
{
BufferedImage image = ImageIO.read(new File(args[0]));
int height = image.getHeight();
int width = image.getWidth();
int[] rgbOriginal = new int[3];
if(args[1].equalsIgnoreCase("red"))
{
rgbOriginal[0] = 255;
rgbOriginal[1] = 0;
rgbOriginal[2] = 0;
}
else if(args[1].equalsIgnoreCase("green"))
{
rgbOriginal[0] = 0;
rgbOriginal[1] = 255;
rgbOriginal[2] = 0;
}
else if(args[1].equalsIgnoreCase("blue"))
{
rgbOriginal[0] = 0;
rgbOriginal[1] = 0;
rgbOriginal[2] = 255;
}
else if(args[1].equalsIgnoreCase("white"))
{
rgbOriginal[0] = 255;
rgbOriginal[1] = 255;
rgbOriginal[2] = 255;
}
else if(args[1].equalsIgnoreCase("gray"))
{
rgbOriginal[0] = 128;
rgbOriginal[1] = 128;
rgbOriginal[2] = 128;
}
else if(args[1].equalsIgnoreCase("cyan"))
{
rgbOriginal[0] = 0;
rgbOriginal[1] = 255;
rgbOriginal[2] = 255;
}
else
{
rgbOriginal[0] = 0;
rgbOriginal[1] = 255;
rgbOriginal[2] = 0;
}
System.out.println(width);
System.out.println(height);
for(int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
Color pixel = new Color(image.getRGB(j,i));
if(pixel.getRed() == rgbOriginal[0] && pixel.getGreen() == rgbOriginal[1] && pixel.getBlue() == rgbOriginal[2])
{
if(args[2].equalsIgnoreCase("red"))
image.setRGB(j,i,Color.RED.getRGB());
else if(args[2].equalsIgnoreCase("green"))
image.setRGB(j,i,Color.GREEN.getRGB());
else if(args[2].equalsIgnoreCase("blue"))
image.setRGB(j,i,Color.BLUE.getRGB());
else if(args[2].equalsIgnoreCase("white"))
image.setRGB(j,i,Color.WHITE.getRGB());
else if(args[2].equalsIgnoreCase("gray"))
image.setRGB(j,i,Color.GRAY.getRGB());
else if(args[2].equalsIgnoreCase("cyan"))
image.setRGB(j,i,Color.CYAN.getRGB());
else
image.setRGB(j,i,Color.BLACK.getRGB());
}
}
}
File resultFile = new File("decoded_file.png");
ImageIO.write(image, "PNG", resultFile);
}
catch(Exception e)
{
System.err.println(e.getMessage());
e.printStackTrace();
}
}
}
看起来像... C#或Java ... – 2014-09-10 22:59:13
是的,对不起。在这个论坛的第一篇文章。这确实是Java。生病编辑在我的身体。 – Phalanges 2014-09-10 23:00:27
不是args [0]程序的名称? – Chrisky 2014-09-10 23:02:22