package ProcessImage;import java.awt.BorderLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.IOException;import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;public class MyFrame extends JFrame{ JLabel label;

int[] pixArray;
int width;
int height;
public MyFrame(){
init();
}

public static void main(String[] args) {

new MyFrame();
}

public void init(){

JMenuBar bar=new JMenuBar();
JMenu menu1=new JMenu("菜单");
JMenuItem item1=new JMenuItem("打开文件");

menu1.add(item1);
bar.add(menu1);

add(bar,BorderLayout.NORTH);

setSize(200,200);
setLocation(100,100);
setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);

item1.addActionListener(new ActionListener(){ @Override
public void actionPerformed(ActionEvent e) {

openFile();
}

});
} public void openFile(){//通过JFileChoose来获取选定的图片 并将其显示在标签上
JFileChooser jc=new JFileChooser();
int returnType=jc.showOpenDialog(null);
if(returnType==JFileChooser.APPROVE_OPTION){
System.out.println("返回类型:"+returnType);

File f=jc.getSelectedFile();
String path=f.getAbsolutePath();
System.out.println(path);

BufferedImage image=null;
try {
 image=ImageIO.read(f);
} catch (IOException e) {

e.printStackTrace();
}
width=image.getWidth();
height=image.getHeight();
pixArray=getImagePixArray(image);

label=new JLabel(new ImageIcon(image));
add(label,BorderLayout.CENTER);
validate();
//repaint();

}

}
public int[] getImagePixArray(Image image) {//获取图片像素点 并存在数组里
int[] pixArray=new int[width*height];

PixelGrabber grabber=new PixelGrabber(image,0,0,width,height,pixArray,0,width);
try {
if(!grabber.grabPixels()){
System.out.println("获取图片像素失败");
}


} catch (InterruptedException e) {

e.printStackTrace();
}

return pixArray;
}
}

解决方案 »

  1.   

    PixelGrabber 是JDK 1.2上面的,
    能贴出来你的问题是什么嘛/?JDK早已经支持Raster的方式提取像素了.......
      

  2.   

    在init()方法中 调用getImagePixArray(Image image)方法时 标签上显示图片变的不正常了不调用者方法 显示就没问题 什么情况呀 ??还有关于初始化 像素抓取器时 的最后个参数有点不是很明白
     API 文档解释是在存放像素点的数组中 每 获得一行的图片像素点  就在该数组之后 空出指定的长度  然后再存放 图片的下一行像素点 
      

  3.   


    public void openFile(){//通过JFileChoose来获取选定的图片 并将其显示在标签上
            JFileChooser jc=new JFileChooser();
            int returnType=jc.showOpenDialog(null);
            if(returnType==JFileChooser.APPROVE_OPTION){
                System.out.println("返回类型:"+returnType);
                
                File f=jc.getSelectedFile();
                String path=f.getAbsolutePath();
                System.out.println(path);
                
                BufferedImage image=null;
                try {
                     image=ImageIO.read(f);
                } catch (IOException e) {
                    
                    e.printStackTrace();
                }
                width=image.getWidth();
                height=image.getHeight();
                pixArray=getImagePixArray(image);//不调用这方法 标签显示图片正常 调用之后 图片显示返现有部分重叠了
                
                label=new JLabel(new ImageIcon(image));
                add(label,BorderLayout.CENTER);
                validate();
                //repaint();
                
            }