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的矩形