-1

我想将像素返回给调用函数,但只有最后一个值是 getin,这意味着它会覆盖该值...

get_pixel_info() 方法正在调用 getPixelData(),在 getPixelData() 方法中,第一个像素 rgb 的值存储在 rgb[] 数组中并返回 rgb 返回到调用函数,因为 for 循环再次控制敌人到 getPixelData() 方法和这个时间覆盖第一个像素上的第二个像素的值,依此类推..我想要所有像素的所有值,但只得到 1

像素 rgb 的值应该返回给调用函数请帮助

public static int[] get_pixel_info() 
{
    int[] rgb={0};
    int[][] rgb2 = new int[0][0];

    BufferedImage img;
    try 
    {
        img = ImageIO.read(new File(IMG));
        int[][] pixelData = new int[img.getHeight() * img.getWidth()][3];
        int counter = 0;
        for(int i = 0; i < img.getWidth(); i++) 
        {
            for(int j = 0; j < img.getHeight(); j++) 
            {
                rgb = getPixelData(img, i, j);

                for(int k = 0; k < rgb.length; k++) 
                {
                    pixelData[counter][k] = rgb[k];
                }

                counter++;                
            }            
        }
    } 
   catch (IOException e) 
   {
        e.printStackTrace();
   }
    return rgb;
}

public static int[] getPixelData(BufferedImage img, int x, int y) 
 {
    int argb = img.getRGB(x, y);   
    int rgb[] = new int[] {            
        ((argb >> 16) & 0xff), //red             
        (argb >> 8) & 0xff, //green
        (argb ) & 0xff //blue
    };

    System.out.println("rgb: " + Integer.toBinaryString(rgb[0]) + " " +        Integer.toBinaryString(rgb[1]) + " " + Integer.toBinaryString(rgb[2]));

    return rgb;
}
4

3 回答 3

1

仔细查看您的代码,尤其是您返回的变量。您正在返回 rgb。您没有使用 rgb2 或 PixelData

当你在它的时候。看一下 Java 中的命名约定。变量不应以大写字母开头,名称应使用驼峰式大小写而不是下划线

于 2013-01-03T09:51:34.477 回答
1

你的意思是使用:

            pixelData[counter] = getPixelData(img, i, j);

而不是第三个嵌套循环(k)?

但是请注意,您的“转换”实际上并没有提供什么好处,只是它使用的内存比BufferedImage表示要多得多。

于 2013-01-03T09:22:26.067 回答
0

这个对我有用:

public static int[] getPixelData(BufferedImage img, int x, int y) {
    int argb = img.getRGB(x, y);
    int rgb[] = new int[3];
    rgb[2] = argb & 0xff;         // b
    rgb[1] = (argb >> 8) & 0xff;  // g
    rgb[0] = (argb >> 16) & 0xff; // r
    return rgb;
}
于 2013-01-03T08:33:04.127 回答