Skip to content

Resizing window outside setup causes NPE when saving surface pixels #162

@processing-bot

Description

@processing-bot

Created by: PixelCatalyst

Description

After using surface.setSize() to resize window outside setup() invoking save() causes NullPointerException. Also, image of the window frame is saved under chosen filename but it has 0 bytes and .tif extension after .jpg or .png. This only happens when non-default renderer is enabled - P2D, P3D or OPENGL.

Code to replicate:

void setup() {
 size(500, 500, P3D); //can also be P2D or OPENGL
}
void draw() {
 background(255);
 
 surface.setSize(400, 400);
 save("test.png"); //NPE thrown here
 exit();
}

Stacktrace:

java.lang.NullPointerExceptionjava.lang.NullPointerException at 
java.desktop/java.awt.image.BufferedImage.setRGB(BufferedImage.java:1058) at 
processing.awt.ShimAWT.saveImageIO(ShimAWT.java:374) at processing.awt.ShimAWT.saveImage(ShimAWT.java:334) at 
processing.core.PImage.saveImpl(PImage.java:3349) at 
processing.opengl.PGraphicsOpenGL.saveImpl(PGraphicsOpenGL.java:764) at processing.core.PImage.save(PImage.java:3308) at 
processing.core.PGraphics.save(PGraphics.java:8584) at processing.core.PApplet.save(PApplet.java:3978) at 
szie_surfaceresize.draw(szie_surfaceresize.java:26) at processing.core.PApplet.handleDraw(PApplet.java:2458) at 
processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:950) at 
jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692) at 
jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674) at 
jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443) at 
jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293) at 
jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147) at 
com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:768) at 
com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81) at 
com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:453) at 
com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178) at 
java.base/java.util.TimerThread.mainLoop(Timer.java:556) at 
java.base/java.util.TimerThread.run(Timer.java:506)java.io.IOException: image save failed. at 
processing.awt.ShimAWT.saveImageIO(ShimAWT.java:420) at processing.awt.ShimAWT.saveImage(ShimAWT.java:334) at 
processing.core.PImage.saveImpl(PImage.java:3349) at 
processing.opengl.PGraphicsOpenGL.saveImpl(PGraphicsOpenGL.java:764) at processing.core.PImage.save(PImage.java:3308) at 
processing.core.PGraphics.save(PGraphics.java:8584) at processing.core.PApplet.save(PApplet.java:3978) at 
szie_surfaceresize.draw(szie_surfaceresize.java:26) at processing.core.PApplet.handleDraw(PApplet.java:2458) at 
processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:950) at 
jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692) at 
jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674) at 
jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443) at 
jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293) at 
jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147) at 
com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:768) at 
com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81) at 
com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:453) at 
com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178) at 
java.base/java.util.TimerThread.mainLoop(Timer.java:556) at 
java.base/java.util.TimerThread.run(Timer.java:506)NullPointerException

Your Environment

  • Processing version: Processing4 built up to commit e96622d
  • Operating System and OS version: Windows 10 build 19042.685

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions