【问题标题】:red(), green(), blue() method in EclipseEclipse 中的 red()、green()、blue() 方法
【发布时间】:2014-05-06 17:18:15
【问题描述】:

我在 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 中实现处理,您必须将 color 类型更改为 int 的点有关。那么,如果您想在 Eclipse 中使用 Processing,有什么方法可以更改/实现这个 red() 方法?

【问题讨论】:

    标签: java eclipse processing


    【解决方案1】:

    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,因为这都是数学。我的第一个猜测是 red() 需要的 PGraphics 对象从未初始化过。

    【讨论】:

    • 首先,非常感谢您的回答!我发现将“(int)red(iP)”更改为“iP >> 16&0xFF”会让我通过那个错误......只是通过,它是否有效我不知道,因为现在错误移动到同样的问题,但是使用了brightness()方法...
    • 好吧,因为您删除了方法调用并仅用数学替换了它,所以您不再获得 NullPointerException 是有道理的,因为您删除了导致问题的方法调用。
    • 再一次,您是否在代码中的任何位置调用了init()size()?如果您进行了这些调用,red() 不应再抛出 NullPointerException,因为该方法需要的 PGraphics 对象将不再是 null
    • 源代码告诉我你在brightness() 方法中遇到了完全相同的问题。 PGraphics 对象从未初始化。
    • Wenggg 非常感谢你,它的工作原理!我将init 放入FingerDetector 构造函数中,它可以工作!哇,非常感谢您,先生! ^^
    猜你喜欢
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多