请问怎么将一幅图片分成9个同样大小的部分??并显示出来

解决方案 »

  1.   

    使用 BufferedImage.getSubImage() 函数就可以了.
    给你一个例子:import java.awt.*;
    import java.awt.image.*;
    import java.io.*;
    import javax.swing.*;class SplitImage {

    private SplitImage() {}

    static public Image[] split_size(String imageFile , int w , int h) {
    Image[] images = new Image[0];
    Image image = getImageFromFile(imageFile);
    if( image == null ) return images;
    BufferedImage bufImage = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_4BYTE_ABGR);
    bufImage.getGraphics().drawImage(image,0,0,null);
    int x = (int)(image.getWidth(null)/w);
    int y = (int)(image.getHeight(null)/h);
    images = new BufferedImage[x*y];
    for(int j=0;j<y;j++) {
    int yy = j*h;
    for(int i=0;i<x;i++) {
    images[j*x+i] = bufImage.getSubimage(i*w,yy,w,h);
    }
    }
    return images;
    }

    static public Image[] split_count(String imageFile , int x , int y) {
    Image[] images = new Image[0];
    Image image = getImageFromFile(imageFile);
    if( image == null ) return images;
    BufferedImage bufImage = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_4BYTE_ABGR);
    bufImage.getGraphics().drawImage(image,0,0,null);
    int w = (int)(image.getWidth(null)/x);
    int h = (int)(image.getHeight(null)/y);
    images = new BufferedImage[x*y];
    for(int j=0;j<y;j++) {
    int yy = j*h;
    for(int i=0;i<x;i++) {
    images[j*x+i] = bufImage.getSubimage(i*w,yy,w,h);
    }
    }
    return images;
    }

    static public Image[] split_size(Image image , int w , int h) {
    Image[] images = new Image[0];
    BufferedImage bufImage = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_4BYTE_ABGR);
    bufImage.getGraphics().drawImage(image,0,0,null);
    int x = (int)(image.getWidth(null)/w);
    int y = (int)(image.getHeight(null)/h);
    images = new BufferedImage[x*y];
    for(int j=0;j<y;j++) {
    int yy = j*h;
    for(int i=0;i<x;i++) {
    images[j*x+i] = bufImage.getSubimage(i*w,yy,w,h);
    }
    }
    return images;
    }

    static public Image[] split_count(Image image , int x , int y) {
    Image[] images = new Image[0];
    BufferedImage bufImage = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_4BYTE_ABGR);
    bufImage.getGraphics().drawImage(image,0,0,null);
    int w = (int)(image.getWidth(null)/x);
    int h = (int)(image.getHeight(null)/y);
    images = new BufferedImage[x*y];
    for(int j=0;j<y;j++) {
    int yy = j*h;
    for(int i=0;i<x;i++) {
    images[j*x+i] = bufImage.getSubimage(i*w,yy,w,h);
    }
    }
    return images;
    }

    static public Image getImageFromFile(String imageFile) {
    File file = new File(imageFile);
    if(!file.exists()) {
    System.out.println ("文件不存在:"+imageFile);
    return null;
    }
    if(!file.isFile()) {
    System.out.println (imageFile+" 不是一个文件");
    return null;
    }
    Image image = Toolkit.getDefaultToolkit().createImage(imageFile);
    return image;
    }

    public static void main(String args[]) {
    String file = "UserImages.gif";
    Image image = getImageFromFile(file);
    JFrame f = new JFrame("测试程序");
    f.setBounds(300,200,400,300);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container c = f.getContentPane();
    c.setLayout(new FlowLayout());
    JButton bz = new JButton(new ImageIcon(image));
    c.add(bz);
    Image[] is = split_count(image,11,1);
    for(int i=0;i<is.length;i++) {
    JButton b = new JButton(new ImageIcon(is[i]));
    c.add(b);
    }
    f.setVisible(true);
    }
    }