//image BufferedImage 格式:BufferedImage.TYPE_INT_ARGB
// width=image.getWidth();
//line 行数
//需求 取图片第line行的R,G数据,int r[]=new int[width];
int g[]=new int[width];
WritableRaster raster = image.getRaster();
int colorData[]=new int[4];
for (int i = 0; i < width; i++) {
colorData=raster.getPixel(i,line,colorData);
r[i]=colorData[0];
g[i]=colorData[1];
                  //这里的值是255或是0,请问是否正确
}

解决方案 »

  1.   

    BufferedImage bi =
        ...;
        ...
    // 注意
    ColorModel cm = bi.getColorModel();int r[]=new int[width];
    int g[]=new int[width];
    WritableRaster raster = image.getRaster();
    int colorData[]=new int[4];
    for (int i = 0; i < width; i++) {
        // 这里得到的是像素,数组中的元素是取样,不是颜色
        // 所以,colorData应改名为pixel
        colorData=raster.getPixel(i,line,colorData);    int blue = cm.getBlue(colorData);
        int red  = cm.getRed(colorData);
        int green  = cm.getGreen(colorData);
        int alpha  = cm.getAlpha(colorData);
    }
      

  2.   

    先谢谢两位.
    TO:UnAgain发出red,green都为0图片背景色为黑,前景色为(255,255,0),完整程序如下:
    /** width 图片宽
     *  height高
     *  xPixel 文字输出的X坐标
     *  yPixel 输出的Y坐标
     *  displayConent 图片内容
    **/
      
    public void sendGeneralContent(int width,int height,int xPixel,int yPixel,Object displayContent){
    try{
    BufferedImage displayImage=new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

    String displayContentStr=(String)displayContent;
             Graphics g = displayImage.getGraphics();
     //定义图像背景
        g.setColor(Color.black);
        g.fillRect(0, 0, width, height);
        //图像前景色
        Color contentColor =new Color(255,255,0);
        g.setColor(contentColor);
        //创建图片要显示得内容
    g.drawString(displayContentStr, xPixel, yPixel);
    //生产图像
    g.dispose();
      

  3.   

    图片背景色为黑,前景色为(255,255,0),完整程序如下:
    /** width 图片宽
     *  height高
     *  xPixel 文字输出的X坐标
     *  yPixel 输出的Y坐标
     *  displayConent 图片内容
    **/
      public void sendGeneralContent(int width,int height,int xPixel,int yPixel,Object displayContent){
    BufferedImage displayImage=new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

    String displayContentStr=(String)displayContent;
             Graphics g = displayImage.getGraphics();
            //定义图像背景
     g.setColor(Color.black);
    g.fillRect(0, 0, width, height);
     //图像前景色
    Color contentColor =new Color(255,255,0);
    g.setColor(contentColor);
    //创建图片要显示得内容
    g.drawString(displayContentStr, xPixel, yPixel);
    g.dispose();//取red,green
    for (int i = 0; i < displayImage.getHeight(); i++) {
                               //CM
    ColorModel cm = displayImage.getColorModel();
    int w=displayImage.getWidth();
    int r[]=new int[w];
    int g[]=new int[w];
    WritableRaster raster = displayImage.getRaster();
    int pixel[]=new int[4];//pixel
    for (int j = 0; j < width; j++) {                                    
    pixel=raster.getPixel(j,i,pixel);                   r[i]=cm.getRed(pixel);
    g[i]=cm.getGreen(pixel);
    System.out.println(r[i]+":"+g[i]);//,当图片内容不为空(如:ABCDEFG),r[i]和g[全部为0
    }
    }


    }
      

  4.   

    // 只是我做的一个例子,不知怎么回事,通过ColorModel只能得到blue
    // 但是按照你原来的办法,取样可以显示正确的颜色值。
    // 我最近正好也在研究java2D image,有问题我们可以讨论。
    // MSN: [email protected]
    // 现在有事,最晚下午3点上线。import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;import javax.swing.*;
    import javax.swing.border.*;public class TestCreateImage extends JPanel{
        BufferedImage bi;
        
        public TestCreateImage() {
            addMouseListener(
                new MouseAdapter(){
                    public void mouseClicked(MouseEvent e){
                        Raster ra = bi.getData();
                        ColorModel cm = bi.getColorModel();
                        int[] pixel = new int[4];                    pixel = ra.getPixel(e.getX(), e.getY(), pixel);                    System.out.println("/////////////////////////////////");
                        for (int i=0; i<pixel.length; i++) {
                            System.out.println(pixel[i]);
                        }
                        System.out.println("------------------------------------------");
                        System.out.println("red: " + String.valueOf(cm.getRed(pixel[0])));
                        System.out.println("green: " + String.valueOf(cm.getGreen(pixel[1])));
                        System.out.println("blue: " + String.valueOf(cm.getBlue(pixel[2])));
                        System.out.println("alpha: " + String.valueOf(cm.getAlpha(pixel[3])));
                    }
            });
        }    public void paintComponent(Graphics g) {
            int width = getWidth(),
                height = getHeight();
            int unit = 20;
            if (bi == null) {
                bi = 
                    new BufferedImage(
                        width, height,
                        BufferedImage.TYPE_INT_ARGB);
                //bi = (BufferedImage)this.createImage(width, height);
                //Graphics2D big = bi.createGraphics();
                Graphics big = bi.getGraphics();
                big.setColor(Color.RED);            Color c1 = new Color(128, 128, 128),
                    c2 = new Color(64, 128, 192),
                    c3 = new Color(32, 96, 160);            big.setColor(c1);
                big.fillRect(0, 0, width/3, height);            big.setColor(c2);
                big.fillRect(width/3 + 1, 0, width/3, height);            big.setColor(c3);
                big.fillRect(width*2/3 + 1, 0, width - width*2/3, height);
            }        g.drawImage(bi, 0, 0, width, height, this);        String[] pn = bi.getPropertyNames();
            if (pn != null) {
                for (int i=0; i<pn.length; i++) {
                    System.out.println(pn[i] + ":\t" + bi.getProperty(pn[i]));
                }
            }
        }    public static void main(String[] args) {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Container container = frame.getContentPane();        frame.setPreferredSize(new Dimension(400, 300));
            container.add(new TestCreateImage());        frame.pack();
            frame.setVisible(true);
        }
    }
      

  5.   

    这几天翻译了几篇文章,可能对你的问题有帮助。Programmer's Guide to the JavaTM 2D API -- Chapter 5 Imaging  <http://blog.csdn.net/unagain/archive/2006/05/04/707566.aspx>
    Programmer's Guide to the JavaTM 2D API -- Chapter 6 Color <http://blog.csdn.net/unagain/archive/2006/05/05/708656.aspx>LookupTable (Java 2 Platform SE 5.0) <http://blog.csdn.net/unagain/archive/2006/05/04/707561.aspx>
    ComponentSampleModel (Java 2 Platform SE 5.0) <http://blog.csdn.net/unagain/archive/2006/05/04/707558.aspx>
    BandCombineOp (Java 2 Platform SE 5.0) <http://blog.csdn.net/unagain/archive/2006/05/04/707557.aspx>