I have this code:
public Image toNegative()
{
int imageWidth = originalImage.getWidth();
int imageHeight = originalImage.getHeight();
int [] rgb = n
Your code will throw a NullPointerException
because you are never assigning a non-null reference to the rgb
variable. Hence, references to it (e.g. rgb[index]
) will generate the exception. If you wish to pass in a null array to getRGB you need to ensure you assign the result array returned by the method; e.g.
int[] rgb = originalImage.getRGB(0, 0, imageWidth, imageHeight, rgb, 0,imageWidth);
If you were to uncomment the code commented out there is a bug in that you are allocating the array as imageWidth * imageWidth
instead of imageWidth * imageHeight
, which is why you're seeing an ArrayIndexOutOfBoundsException
.
There are two problems:
The width of the array is not the width of the image but the "scan size" (some image sizes get padded with extra pixels)
If you call getRGB()
with a null
array, the method will create an array but it won't change the rgb
reference - Java doesn't support "out parameters".
To make this work, use
rgb = originalImage.getRGB(0, 0, imageWidth, imageHeight, null, 0,imageWidth);