When using save() function my canvas is always grey

Hey I could use a little help, as my title says I am having trouble getting some high resolution files of my artwork. Here is my code please let me know what I could do to get high resolution images of the artwork I make.


t = 0
points =

def setup():

def draw():
points =
t = 0
while t < 1000:
t += 0.01

for i,p in enumerate(points):
    if i < len(points) - 1:
        line(p[0],p[1], points[i+1][0],points[i+1][1])

def harmonograph(t):
a1=a2=a3=a4 = 100
f1,f2,f3,f4 = 2.01,3,3,2
p1,p2,p3,p4 = -PI/2,0,-PI/16,0
d1,d2,d3,d4 = 0.00085,0.0065,0,0
x = a1cos(f1t + p1)exp(-d1t) + a3cos(f3t + p3)exp(-d3t)
y = a2sin(f2t + p2)exp(-d2t) + a4cos(f4t + p4)exp(-d4t)
return [x,y]

Thank you, Drel

Welcome, Drel

Your save() function is in the setup(). You’re saving an image before Processing has a chance to draw anything.

Perhaps you could activate this using a mouse-press instead:

def setup():

def mousePressed():

Alternatively, you could add a save() function to the draw(), but add some condition to avoid it saving every frame.

Thank you @tabreturn, i shall use the mousePressed and try to work on my conditional statements, I like the latter but my coding rough.

1 Like

Does the save function warrant high resolution images or do I need to learn the create graphics function?

What do mean by “high resolution images”? Your sketch 1260 × 800 pixels. You can just increase the values in your size() function for more pixels.

You can insert your save() function at the end of your draw() loop, followed by an exit() function. This way the window will save the graphic on the first frame then close again.

1 Like

By high resolution I meant, with keeping the window at a size I can view on my computer screen without blowing it past my screens borders ( ie 1260 x 800), i can successfully save now but when I go to zoom in the picture is bitmapped.

Would drawing to the Pgraphics and then saving to a vector format supersede my problem?

A JPG is a raster/bitmap image. Zoom in far enough, and you’ll always see pixels.

I’m not sure why you’re using a draw() function? After all, you’re saving a single frame? Moreover, why does the Processing output need to fit within your screen borders? Here’s some code that generates and saves an image 5× the resolution of your screen and closes immediately:

size(6300, 4000)
circle(width/2, height/2, width/3)

You can always scale the JPG to fit your screen (in your image viewer or similar software); it’ll have the resolution to handle more ‘zooming in’ .

Alternatively, you could render an SVG (vector) version of the sketch:


def setup():
    size(1260, 800, SVG, 'this3.svg')

def draw():
    circle(width/2, height/2, width/3)

You can leave that file as vector, or rasterize it at your desired resolution (using GIMP, Photoshop, etc.).

1 Like

Thank you for your response on making this clearer.

I thought I needed to include the draw() command for the software to produce anything on the screen.

Now I understand it’s just for doing more than one frame.

Disregard the notion of it only fitting in my screen boarders, you can scale in a viewfinder yes…. Thank you

I’m just starting out in processing and have made some pretty Frankenstein sketches just looking at what’s on the web and combining and writing.