Eclipse中的red(),green(),blue()方法

时间:2014-05-06 17:18:16

标签: java eclipse processing

我在Eclipse中尝试了Blobscanner的hand_gesture_recognition 这一行得到一个像素的红色值:

int  []  Background;  

void Set(PImage I){

    for(int i=0; i<I.width*I.height; i++){
        int iP=I.pixels[i];
        Background[i*3]=(int)red(iP);
    }

}

最后一行是导致此错误的原因:

Exception in thread "Animation Thread" java.lang.NullPointerException  
    at processing.core.PApplet.red(Unknown Source)  
    at Test$PBGS.Set(Test.java:475)  
    at Test$PBGS.<init>(Test.java:466)  
    at Test.setup(Test.java:39)  
    at processing.core.PApplet.handleDraw(Unknown Source)  
    at processing.core.PApplet.run(Unknown Source)  
    at java.lang.Thread.run(Unknown Source)  

我猜这与如果你在Eclipse中实现Processing,你必须将color类型改为int有关。那么,如果你想在Eclipse中使用Processing,有没有办法改变/实现这个red()方法?

1 个答案:

答案 0 :(得分:2)

NullPointerExceptions不应该是colorint之间类型转换的结果,并且在任何情况下red()都会返回float,所以你的演员应该工作正常。

我假设你初始化了你的数组,因为堆栈跟踪似乎表明该错误并非由该分配特别引起......

查看Processing source for PApplet,我看到red()的定义:

public final float red(int rgb) {
    return g.red(rgb);
}

其中g被声明为

public PGraphics g;

根据我对源代码的快速扫描,似乎g仅在init()方法或public void size(final int w, final int h, String renderer, String path)方法中初始化。

查看堆栈跟踪,似乎g尚未初始化。您是否在代码中的任何其他地方拨打了init()size()

PGraphics中:

public final float red(int rgb) {
    float c = (rgb >> 16) & 0xff;
    if (colorModeDefault) return c;
    return (c / 255.0f) * colorModeX;
}

所以没有什么可以抛出NullPointerException,因为它是所有数学。我的第一个猜测是PGraphics所需的red()对象从未初始化。