get()抛出ArrayIndexOutOfBoundsException

时间:2017-09-11 15:43:37

标签: processing

我需要创建一个具有可变定义大小的叠加图像。但是,如果我在surface.setSize()尝试使用get()存储生成的图像时使用ArrayIndexOutOfBoundsException,则草图会与size()崩溃。为什么? final int w = 320; final int h = 240; PImage overlay; void setup() { surface.setSize(w, h); // remove it, and you're ok background(0); // draw something overlay = get(); // exception } 以不同方式初始化画布吗?

<parent :val="myval">
     <child :initialval="val"></child>
</parent>

2 个答案:

答案 0 :(得分:0)

看一下this问题,我不能对此处的“为什么”发表评论,但据我所知,setSize()在设置完成后运行,因为它可以'在绘制事物(在这种情况下,背景)时运行。将该行移动到安装结束时不会产生越界异常:

final int w = 320;
final int h = 240;    

PImage overlay;

void setup() {    
  background(0,200,150);      
  overlay = get();       
  surface.setSize(w, h);
}

void draw() {
  tint(0,200,0);
  image(overlay,50,0);
}

修改:在这种情况下get()似乎只抓取像素的默认窗口大小

有一种解决方法 - 您可以首先使用大于sizew的合理或基本上任何维度声明h,然后使用get()方法使用4个参数根据wh尺寸抓取图像:

final int w = 320;
final int h = 240;

PImage overlay;

void setup() {

  size(1000, 1000); //can be any numbers greater than w and h
  background(0, 200, 150);      
  surface.setSize(w, h);
  overlay = get(0, 0, w, h);
}

void draw() {
  tint(0, 200, 0);
  image(overlay, 50, 0);
}

答案 1 :(得分:0)

我猜你正在使用surface.setSize()而不是size(),因为当你试图将变量传递到size()函数时出错了?

该问题的解决方案是来调用surface.setSize()函数。相反,您应该定义一个settings()函数,然后使用变量作为参数调用size()函数。其余代码将保留在setup()函数中。

final int w = 320;
final int h = 240;

PImage overlay;

void settings() {
  size(w, h);
}

void setup() {
  background(0);
  overlay = get();
}

可以在the reference找到更多信息。

另一种方法是完全删除wh变量,并将数字传递给size()函数。然后,只要您使用widthheight变量,就可以使用wh变量。