我想将像素返回到调用函数,但只有最后一个值是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;
}
答案 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;
}