Java 用图像每个像素的RGB值填充ArrayList

Java 用图像每个像素的RGB值填充ArrayList,java,image,excel,arraylist,Java,Image,Excel,Arraylist,您好,我想创建一个程序,读取一个图像,然后输出一个excel,图像如下---> 要实现这一点,我想我必须将图像中每个像素的rgb值读取到ArrayList 我想按以下顺序保存它 示例5x5px图像 01,02,03,04,05 06,07,08,09,10 11,12,13,14,15 ....... 我已经准备好了,但是它没有正确运行。有人能帮我做一下算法吗 public class Engine { private int x = 0; private int

您好,我想创建一个程序,读取一个图像,然后输出一个excel,图像如下--->

要实现这一点,我想我必须将图像中每个像素的rgb值读取到ArrayList 我想按以下顺序保存它

示例5x5px图像

01,02,03,04,05
06,07,08,09,10  
11,12,13,14,15
.......
我已经准备好了,但是它没有正确运行。有人能帮我做一下算法吗

    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;
            }
        }

};
公共类引擎{
私有整数x=0;
私有整数y=0;
私有整数计数=50;
私有布尔值isFinished=false;
ArrayList arr=新的ArrayList();
公共程序(){
BuffereImage img=null;
试一试{
img=ImageIO.read(新文件(“res/images.jpg”);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
System.out.println(“未找到img文件”);
}
while(isFinished=false){
int rgb=img.getRGB(x,y);
颜色c=新颜色(rgb);
arr.add(c);
System.out.println(“y:+y”);
x++;}
如果(x==49){
y++;
x=0;
}else如果(x==49&&y==49){
isFinished=true;
}
}
};

首先:循环时,
出现错误

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(isFinished=false)

second:使用
进行
循环,而不是
进行
循环

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);
            }

        }

您需要知道,若图像变大,ArrayList将变得非常大,最好使用普通数组(您知道..[]),并使其变为双色。 如果您可以就地创建excel,并且不将所有数据保存在数组中,则只需在将数据写入控制台的位置设置适当的值,效果会更好。 我还没有测试代码,但应该可以。 如果您遇到任何异常,请发布其内容,以便我们提供帮助

试试这样:

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);
            }
        }
    }
};
公共类引擎{
私有整数x=0;
私有整数y=0;
ArrayList arr=新的ArrayList();
公共程序(){
BuffereImage img=null;
试一试{
img=ImageIO.read(新文件(“res/images.jpg”);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
System.out.println(“未找到img文件”);
}

对于(int x=0;x)您得到了什么错误?
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);
            }
        }
    }
};