//不知是不是这个意思?
//希望这个程序对你有用
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*; public class GetPixel {public PixelMadness() {
ImageHolder holder = new ImageHolder();
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.add(holder);
frame.getContentPane().add(panel);
frame.setSize(400,400);
frame.setVisible(true);
}public static void main(String[] args) { 
GetPixel getpixel = new GetPixel(); 
}}class ImageHolder extends Canvas {
ImageIcon icon = new ImageIcon("zx2.jpg"); 
Image image = icon.getImage(); 
int imageWidth = image.getWidth(this);
int imageHeight = image.getHeight(this);
int[] pixelArray = new int[imageWidth * imageHeight];
PixelGrabber grabber = new PixelGrabber(image,0,0,imageWidth,imageHeight,pixelArray,0,imageWidth);public ImageHolder() {
try { grabber.grabPixels(); }
catch(InterruptedException ie){
System.out.println("Pixel array not completed");
return;
}addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent me){
int mouseX = (int)me.getPoint().getX();
int mouseY =(int) me.getPoint().getY();
int pixel = pixelArray[(mouseY * imageWidth) + mouseX];
getPixel(pixel);
}
});setSize(imageWidth,imageHeight);
}public void paint(Graphics g){
int xCenter = (getSize().width / 2) - (imageWidth / 2);
int yCenter = (getSize().height / 2) - (imageHeight / 2);
g.drawImage(image, xCenter, yCenter, imageWidth, imageHeight, this);
}public void getPixel(int pixel){
    int  alpha = (pixel >> 24)&0xff;
    int  red  = (pixel >> 16)&0xff;
    int  green = (pixel >> 8)&0xff;
    int  blue  = (pixel)&0xff;
    System.out.println( "("+alpha+","+red+","+green+ ","+blue+ ")");
}

解决方案 »

  1.   


    哇,又是您啊!!厉害,以后分就直接给您好了,呵呵!您的程序用了swing,俺需要在客户端运行,用AWT好不好使??
      

  2.   

    不过就是不用swing ,那么ImageIcon就不能用。
    不用ImageIcon则grabber.grabPixels(); 会有问题。
    我估计是不能保证图象象素被取到的原因。
    看看swing2那本书,上面关于ImageIcon的解释就是这里用ImageIcon的理由。
    我试过用MediaTracker但是没有成功。
    改在客户端我想会有一些改动。
    但是总体结构上是不会变的。
      

  3.   


    大可不必用ImageIcon,俺的程序不要求取来图像的像素。程序会绘制图形,形状不定,每个形状都会填充唯一一种颜色,俺需要知道mouse当前所在哪一个图形里。
      

  4.   

    当然要取得象素了!!!!!!
    你想象一下,你的鼠标是随意点的。
    你事先不会知道鼠标会点到哪个图形区域中去。
    而你的每一个图形区域的颜色是不同的。
    同一个区域中颜色相同,那么在这个区域中的
    鼠标无论在哪一点取得的象素值都是相同的。那么你事先可以把不同区域的颜色存(象素)存在一个地方,
    今后每点一次鼠标,取得象素值,和表中值比较。
    不同则在比,总可以在先造好的表中得到与你的鼠标值相同的值,然后输出是某某图形区域就行了。
    这样就可以知道是在哪个图形区域中了。
    如果你不取的每一点的象素值然后比较判断的话,恐怕不行吧。比如,你有红,黄两个区域。形状不规则,你在某处随意点下鼠标,取得该点象素值。
    如果是(xxx,xxx,xxx)则是红中的。说明鼠标当前在红色图形区域中。
    如果是(yyy,yyy,yyy)则是黄中的。说明鼠标当前在黄色图形区域中。
    但是你事先得有一个比较的表。取了象素则和表中值比较,输出结果。
      

  5.   

    用BufferedImage就可以了,如:
    import java.awt.color.*;
    ....
    BufferedImage bi = new BufferedImage(400,300,ColorSpace.TYPE_RGB);
    //画图
    Graphics g = bi.getGraphics();
    g.drawString(...);
    //取得象素
    Color color = new Color(bi.getRGB(int x, int y)); 
    再作判断就好了,你试试。
      

  6.   


    感谢各位前辈,尤其是bootcool,俺明白您的意思了,就剩下怎样把绘制的图形转成Image了,俺回去试试,很快就会给分!!
      

  7.   


    怎样把指定的矩形区域转成Image呢??thank !
      

  8.   

    //把graphics 转成Image 困难。我还没找到方法。
    //knight_qmh(辉)的想法提示了我,我想可以用这样的方法实现同
    //样的功能。并且满足你的要求。用bufferimage画图。
    //图形可以为你自己绘制的长方形等等,或是从文件读入的图象。import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import javax.swing.*; public class GetRectPixel {public GetRectPixel() {
    ImageHolder holder = new ImageHolder();
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    panel.add(holder);
    frame.getContentPane().add(panel);
    frame.setSize(400,400);
    frame.setVisible(true);
    }public static void main(String[] args) { 
    GetPixel getpixel = new GetPixel(); 
    }
    }class ImageHolder extends Canvas{
    int rectWidth = 80;
    int rectHeight = 80;
    BufferedImage bi ;public ImageHolder() {
    bi = new BufferedImage(400,400,BufferedImage.TYPE_INT_RGB);
    addMouseListener(new MouseAdapter(){
    public void mouseClicked(MouseEvent me){
    int mouseX = (int)me.getPoint().getX();
    int mouseY =(int) me.getPoint().getY();
    getPixel(mouseX,mouseY);
    }
    });setSize(100,100);
    }public void paint(Graphics g){
    g.drawRect(50, 50,rectWidth,rectHeight);
    g.setColor(Color.red);
    g.fillRect(50, 50,rectWidth,rectHeight);
    }public void getPixel(int x,int y){
      int rgb = bi.getRGB(x,y);
      int red = (rgb>>24)&0xff;
      int green = (rgb>>16)&0xff;
      int blue = (rgb>>8)&0xff;
      System.out.println( "("+red+","+green+ ","+blue+ ")");
    }
      

  9.   

    //程序有误,更正如下。
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import javax.swing.*; public class GetRectPixel {public GetRectPixel() {
    ImageHolder holder = new ImageHolder();
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    panel.add(holder);
    frame.getContentPane().add(panel);
    frame.setSize(400,400);
    frame.setVisible(true);
    }public static void main(String[] args) { 
    GetPixel getpixel = new GetPixel(); 
    }
    }class ImageHolder extends Canvas{
    BufferedImage bi ;
    Image image; 
    MediaTracker mt ;
    int imageWidth;
    int imageHeight;public ImageHolder() {
    mt =new MediaTracker(this); 
    try{
    image = Toolkit.getDefaultToolkit().createImage("gigi3.jpg");
    mt.addImage(image,0);
    mt.waitForAll();
    imageWidth =  image.getWidth(this);
    imageHeight = image.getHeight(this);
    }
    catch(Exception e){}
    bi = new BufferedImage(imageWidth,imageHeight,BufferedImage.TYPE_INT_RGB);
    addMouseListener(new MouseAdapter(){
    public void mouseClicked(MouseEvent me){
    int mouseX = (int)me.getPoint().getX();
    int mouseY =(int) me.getPoint().getY();
    getPixel(mouseX,mouseY);
    }
    });setSize(imageWidth,imageHeight);
    }public void paint(Graphics g){
    int xCenter = (getSize().width / 2) - (imageWidth / 2);
    int yCenter = (getSize().height / 2) - (imageHeight / 2);
    g.drawImage(image, xCenter, yCenter, imageWidth, imageHeight, this);
    }public void getPixel(int x,int y){
      ColorModel cm = this.getColorModel();
      int rgb = cm.getRGB(x*y);
      int red = (rgb>>24)&0xff ;
      int green = (rgb>>16)&0xff ;
      int blue = (rgb>>8)&0xff ;
      System.out.println( "("+red+","+green+ ","+blue+ ")");
     }