2016-05-19 3 views
2

Каков самый короткий код, который можно записать в java, чтобы разбить изображение (скажем, 200x1000) на 10 изображений десятой высоты, но такой же ширины (200x100)?Как разбить изображение на субимазы?

Mine - довольно длинный код; основная часть, я просто даю:

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

ш, ч ширину и высоту большого изображения

+1

Что вы пробовали? Никто не может выполнять вашу (домашнюю) работу, пока вы не приложите некоторые усилия. –

+0

Я предпочел бы беспокоиться о трех вложенных циклах, чем часть int rgb. – Jankapunkt

+0

@Jankapunkt. Долгий срок, я хотел сказать, что я сам понимаю, что использовал много ненужных дополнительных вещей, которые мне, возможно, не нужны. – AbracaDabra

ответ

1

вы можете получить суб образ из BufferedImage с использованием getSubimage (int x, int y, int w, int h). Попробуйте это:

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

}

Смежные вопросы