Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Image(x,y) = image(x*2, y*2) ?

in Questions Posts: 166

Just wondering why created images are actually twice the resolution specified?

Is this for the retina displays?

Tagged:

Comments

  • dave1707dave1707 Mod
    Posts: 6,828

    @Kirl On a non retina device, a 20x20 pixel image is just that, 20 pixels by 20 pixels. On a retina device, a 20x20 pixel image is 40 pixels by 40 pixels because a retina device also has pixels at the 1/2 pixel positions. A non retina screen goes in pixel increments of 1. That is 1,2,3,4, etc. A retina device goes in 1/2 pixel increments. That’s .5, 1, 1.5, 2, 2.5, 3, 3.5, 4 . If you save an image, there are 2 images that get saved.

  • dave1707dave1707 Mod
    edited December 2017 Posts: 6,828

    @Kirl Here’s an example. The image on the screen is 100x100 pixels. If you look in the touched function, you see 2 for loops that go from 1 to 200 in steps of 2 which is twice the size. When you tap the screen, every other pixel in the image is set to black. To get to the 1/2 pixels with rawSet and rawGet, you use double the size.

    EDIT: Updated the code below to read back a line thru the image.

    function setup()
        img=image(100,100)
        setContext(img)
        background(255,0,0)
        fill(255)
        ellipse(50,50,20)
        setContext()
        saveImage("Dropbox:eee",img)
        rd=false
    end
    
    function draw()
        background(40, 40, 50)
        fill(255)
        if not rd then
            text("tap screen to set each .5 pixel in the image below to 0's",WIDTH/2,HEIGHT-100)
        else
            text("tap screen to read a single line of the pixel values thru the image",WIDTH/2,HEIGHT-100)
        end
        sprite(img,300,300)
    end
    
    function touched(t)
        if t.state==BEGAN then
            if not rd then
                rd=true
                for x=1,200,2 do
                    for y=1,200,2 do
                        img:rawSet(x,y,0,0,0,0)
                    end
                end
            else
                for x=1,200 do
                    r,g,b,a=img:rawGet(x,51)
                    print(string.format("%.1f = %3d  %3d  %3d  %3d",x/2,r,g,b,a))
                end
            end
        end
    end
    
    
    
    
  • Posts: 166

    Awesome, thanks dave! =)

Sign In or Register to comment.