Java 边界外异常设置像素
我试图填充一个像素矩形,但我总是在下一行获得Java 边界外异常设置像素,java,awt,Java,Awt,我试图填充一个像素矩形,但我总是在下一行获得Arrayindexoutofbounds: targetwr.setPixels(i, j, 3, 3, pixel); 这是我的密码: WritableRaster sourcewr = source.getRaster(); BufferedImage bi = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.
Arrayindexoutofbounds
:
targetwr.setPixels(i, j, 3, 3, pixel);
这是我的密码:
WritableRaster sourcewr = source.getRaster();
BufferedImage bi = new BufferedImage(source.getWidth(),
source.getHeight(), BufferedImage.TYPE_INT_ARGB);
WritableRaster targetwr = bi.getRaster();
for (int i = 0; i < sourcewr.getWidth() - rate; i += rate) {
for (int j = 0; j < sourcewr.getHeight() - rate; j += rate) {
int[] pixel = null;
pixel = sourcewr.getPixel(i, j, pixel);
System.out.println(i + " " + j);
targetwr.setPixels(i, j, 3, 3, pixel);
}
}
WritableRaster sourcewr=source.getRaster();
BuffereImage bi=新的BuffereImage(source.getWidth(),
source.getHeight(),BufferedImage.TYPE_INT_ARGB);
WritableRaster targetwr=bi.getRaster();
对于(int i=0;i
非常简单。sourcewr
光栅大于targetwr
光栅。您正在迭代sourcewr
的长度和高度,从不检查坐标是否在targetwr
的边界内
您可以检查i
和j
是否在范围内,或者确保光栅在嵌套的for
循环之前的大小相同。e、 g
if(i < targetwr.getWidth() && j < targetwr.getHeight()) {
targetwr.setPixels(i, j, 3, 3, pixel);
}
if(i
这显然也受到变量
速率
的影响,不管是什么。它没有在您的代码片段中定义。“如果坐标不在边界内,或者如果dArray太小而无法容纳输入。”我相信这里的情况是后者?在getPixel
和setPixels
之间存在差异。即,s
。(准确地说,是最后一个)。您可能需要pixel=sourcewr.getPixels(i,j,3,3,pixel)
来获得一个数组,该数组的大小适合以后调用setPixels
。不确定您在那里实际做了什么,但是…为了更快地获得更好的帮助,请发布一个(最小完整且可验证的示例)。source.getWidth()
&source.getHeight()
&rate的值是多少?这一切都取决于它,因为您在for
循环中使用了它。rate是采样率。如果速率为3,则每三个像素在源中被跟踪一次,那么它应该填充一个3*3的矩形