用一个Image的每个像素的RGB值填充一个ArrayList

你好,我想创build一个程序,读入一个图像,然后输出像这样的图像excel – > http://www.boydevlin.co.uk/images/screenshots/eascreen04.png

为了实现这一点,我想我必须读取图像中的每个像素的rgb值到一个ArrayList我想保存在下面的顺序

示例5x5px图像

01,02,03,04,05 06,07,08,09,10 11,12,13,14,15 ....... 

我已经有这个,但它不正确的工作可以有人帮助我的algorithm

  public class Engine { private int x = 0; private int y = 0; private int count = 50; private boolean isFinished = false; ArrayList<Color> arr = new ArrayList<Color>(); public void process(){ BufferedImage img = null; try { img = ImageIO.read(new File("res/images.jpg")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("img file not found"); } while(isFinished = false){ int rgb = img.getRGB(x, y); Color c = new Color(rgb); arr.add(c); System.out.println("y:"+ y); x++;} if(x == 49){ y++; x = 0; }else if(x == 49 && y == 49){ isFinished = true; } } }; 

你需要知道,如果图像变大,ArrayList将会变得非常大,更好地使用普通数组(你知道.. []),并且使它成为两个方面。 更好的是,如果你可以在原地创buildexcel,而不是将所有的数据保存在数组中,只需要在数据写入控制台的地方设置适当的值即可。 我没有testing代码,但应该没问题。 如果你有任何exception发布其内容,以便我们可以帮助。

尝试这样的事情:

 public class Engine { private int x = 0; private int y = 0; ArrayList<Color> arr = new ArrayList<Color>(); public void process() { BufferedImage img = null; try { img = ImageIO.read(new File("res/images.jpg")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("img file not found"); } for(int x=0;x<img.getWidth();x++){ for(int y=0;y<img.getHeight();y++){ int rgb = img.getRGB(x, y); Color c = new Color(rgb); arr.add(c); System.out.println("x: "+ x + " y:" + y +" color: " + c); } } } }; 

首先while循环中有错误

将其转换为:

while (isFinished=false)

 while (isFinished==false) 

第二 :使用for循环而不是while循环

 for (int x = 0; x < img.getWidth(); x++) { for (int y = 0; y < img.getHeight(); y++) { int rgb = img.getRGB(x, y); Color c = new Color(rgb); arr.add(c); } } 

如果你想通过使用while循环,试试这个:

 while (isFinished == false) { int rgb = img.getRGB(x, y); Color c = new Color(rgb); arr.add(c); x++; if (x == img.getWidth()) { y++; x = 0; } else if (x == img.getWidth() - 1 && y == img.getHeight() - 1) { isFinished = true; } }