getRaster 方法中出现数组越界异常
array out of bound exception occured in getRaster method
我正在读取文件并尝试获取图像的宽度和高度。但是,每当我调用此行
时,我都会遇到异常
inImg.getRaster().getPixels(0,0,width,height,pixels);
我遇到的异常是
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 307200
at sun.awt.image.ByteInterleavedRaster.getPixels(ByteInterleavedRaster.java:1014)
at sobel_java.main(sobel_java.java:22)
我的密码是
public class Sobel {
public static void main(String[] args) throws IOException{
int i, j;
double Gx[][], Gy[][], G[][];
FileInputStream inFile = new FileInputStream("lena.bmp");
BufferedImage inImg = ImageIO.read(inFile);
int width = inImg.getWidth();
int height = inImg.getHeight();
int[] pixels = new int[width * height];
int[][] output = new int[width][height];
inImg.getRaster().getPixels(0,0,width,height,pixels);
}}
感谢您的帮助。
getPixels()
方法将栅格的所有样本存储到输出数组中,每个像素不止一个。您可以使用 getNumBands()
获得每个像素的样本数。增加输出数组的长度:
int numBands = inImg.getRaster().getNumBands();
int[] pixels = new int[width * height * numBands];
我正在读取文件并尝试获取图像的宽度和高度。但是,每当我调用此行
时,我都会遇到异常inImg.getRaster().getPixels(0,0,width,height,pixels);
我遇到的异常是
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 307200
at sun.awt.image.ByteInterleavedRaster.getPixels(ByteInterleavedRaster.java:1014)
at sobel_java.main(sobel_java.java:22)
我的密码是
public class Sobel {
public static void main(String[] args) throws IOException{
int i, j;
double Gx[][], Gy[][], G[][];
FileInputStream inFile = new FileInputStream("lena.bmp");
BufferedImage inImg = ImageIO.read(inFile);
int width = inImg.getWidth();
int height = inImg.getHeight();
int[] pixels = new int[width * height];
int[][] output = new int[width][height];
inImg.getRaster().getPixels(0,0,width,height,pixels);
}}
感谢您的帮助。
getPixels()
方法将栅格的所有样本存储到输出数组中,每个像素不止一个。您可以使用 getNumBands()
获得每个像素的样本数。增加输出数组的长度:
int numBands = inImg.getRaster().getNumBands();
int[] pixels = new int[width * height * numBands];