BufferedImage.getRGB(int,int,int,int,int [],int,int)如何工作?

时间:2014-04-06 03:12:42

标签: java arrays parameters rgb bufferedimage

所以我一直在youtube上关注游戏编程的教程,这个代码弹出: bufferedImageObject.getRGB(int, int, int, int, int[], int, int);并且给出的解释是,基本上,.getRGB()采用将bufferedImageObject的像素数据设置为通过方法参数传递的int []。

所以,这是我的问题:这究竟是如何运作的?比如,很明显getRGB方法修改了int []吧?我尝试在测试程序中这样做,但没有任何改变。那么,getRGB方法究竟是如何将数据存储到int []数组中的呢?最重要的是,这个限制是什么?我从来没有遇到过这种事情,但我可以看到无限的可能性!

感谢您提供任何见解,请随时修改我的问题,因为我对提问的问题很糟糕!

编辑: 这是一个我刚刚用以下方法测试过这个想法的程序:

public class main {
    public static void main(String[] args) {
        int t = 10;
        test(t);
        System.out.println(t);
    }

    public static void test(int i) {
        i = 15;
    }
}

打印出来的价值是' 10'。那么,在这种情况下,我如何使用t方法修改test()变量?缺少t = test(t);,测试返回15 ....

1 个答案:

答案 0 :(得分:3)

我认为这整个问题可能归结为你不理解Java的传值语义。

public static void main(String[] args) {
    int t = 10;
    test(t);
    System.out.println(t);
}

public static void test(int i) {
    i = 15;
}
  

那么,在这种情况下,我如何使用t方法修改test()变量? t = test(t); test返回15

简单的答案是你不能。

您无法编写将在另一个方法中修改局部变量值的方法。在Java中根本不可能。

这就是为什么我们坚持说Java参数传递是"传值"。


回到原来的问题,鉴于此:

   bufferedImageObject.getRGB(int, int, int, int, int[], int, int);

问题:getRGB如何返回数组参数中的值?

答案:像素值从图像复制到数组中。

问题:这是如何(仍然)按值传递的?

答案:传递的参数(按值!!)是对数组的引用。 getRGB正在修改数组。但它没有修改数组引用。


  

我尝试在测试程序中这样做,但没有任何改变。

我需要>>看<<在我解释之前的那个测试程序。但我敢打赌,这个解释与我上面写的一致。