Java 用图像每个像素的RGB值填充ArrayList
您好,我想创建一个程序,读取一个图像,然后输出一个excel,图像如下---> 要实现这一点,我想我必须将图像中每个像素的rgb值读取到ArrayList 我想按以下顺序保存它 示例5x5px图像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
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);
}
}
}
};