When using get() to grab the screen, the image grabbed is always half the dimensions of the dimensions requested. Here the image being loaded is 512x512 to fit the canvas but after grabbing using new logo = get(0, 0, 512, 512) , it only gets 256x256 image?
Just had another thought - instead of changing the pixel density try changing image(newlogo, 0, 0); to image(newlogo, 0, 0, 512, 512);
It is not a bug. Before hires monitors a pixel in a bitmap matched a pixel on the screen i.e. a pixel density of 1.
You are using a MacBook Air most probably with a retina display which has a pixel density of 2 so a screen pixel is a 2x2 pixel square in the bitmap image so when displayed the image appears to be half the size.
By specifying both the position, width and height you are telling Processing the actual display position and size to use. This gives a consistent output no matter what your pixel density.