在双维数组中存储像素即rgb

时间:2013-01-03 07:58:42

标签: java rgb

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

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

应将像素值rgb返回给调用函数pls help

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;
}

3 个答案:

答案 0 :(得分:1)

您的意思是使用:

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

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

但请注意,您的“转化”实际上提供的功能很少,只是它使用的内存远远超过BufferedImage表示。

答案 1 :(得分:1)

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

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

答案 2 :(得分: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;
}