我需要创建一个具有可变定义大小的叠加图像。但是,如果我在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>
答案 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()
似乎只抓取像素的默认窗口大小
有一种解决方法 - 您可以首先使用大于size
和w
的合理或基本上任何维度声明h
,然后使用get()
方法使用4个参数根据w
和h
尺寸抓取图像:
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找到更多信息。
另一种方法是完全删除w
和h
变量,并将数字传递给size()
函数。然后,只要您使用width
和height
变量,就可以使用w
和h
变量。