2017-09-11 6 views
0

可変定義サイズのオーバーレイイメージを作成する必要があります。しかし、私がget()で結果の画像を保存しようとしたときにsurface.setSize()を使用すると、スケッチはArrayIndexOutOfBoundsExceptionでクラッシュします。どうして? size()はキャンバスを別の方法で初期化しますか?get()throws ArrayIndexOutOfBoundsException

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 
} 

答えて

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()のように思えます

whより大きい値を持つsizeを宣言してから、wに従って画像を取得するために4つのパラメータを使用してget()メソッドを使用すると、それを回避する方法があります。 h寸法:あなたはsize()関数に変数を渡すことを試みたときにエラーを得たので

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); 
} 
0

私はあなたがsurface.setSize()代わりのsize()を使用していることを推測していますか?

関数を呼び出すには、この問題の解決策はではなく、です。代わりに、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で見つけることができます。

もう1つの方法は、whの変数を完全に取り除いて、size()関数に数値を渡すだけです。そして、以前にwhの変数を使用していた場所では、widthheightの変数を使用できます。

関連する問題