如何将图像分解为子图像?

时间:2016-05-19 05:30:06

标签: java image image-processing

用java编写的最短代码是什么,可以将图像(例如200x1000)分成10个高度相同但宽度相同(200x100)的图像?

我的代码很长;主要部分,我只是给予:

for (int i_=0;i_<10;i_++)
            {
                for(int k=i_*100;k<i_*100+h/10;k++)
                    {
                        for(int j_=0;j_<w;j_++)
                            {
        
                                int pixv=img.getRGB(j_,k);
                                r=(pixv>>16)&0xff;
                                g=(pixv>>8)&0xff;
                                b=(pixv)&0xff;
                                int rgb=new Color(r,g,b).getRGB();
                                img.setRGB(j_,k-i_*200,rgb);
                             }
                     }
                 // Here I am writing the img to a new .bmp file thus creating 10 seperate files
             }

这里的img是一个BufferedImage

w,h大图像的宽度和高度

1 个答案:

答案 0 :(得分:1)

您可以使用getSubimage(int x,int y,int w,int h)从BufferedImage获取子图像。试试这个:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class NewClass9 {

public static void main(String[] args) throws IOException{
  BufferedImage img = null;
  img = ImageIO.read(new File("C:\\users\\uzochi\\desktop\\Penguins.jpg"));
  for(int i = 0;i<10;i++){
    BufferedImage sub = img.getSubimage(0, i*(img.getHeight()/10), img.getWidth(), img.getHeight()/10);
    File f = new File("C:\\users\\uzochi\\desktop\\SubImage"+i+".png");
    ImageIO.write(sub, "png", f);
  }
}

}