Just wondering why created images are actually twice the resolution specified?
Is this for the retina displays?
Just wondering why created images are actually twice the resolution specified?
Is this for the retina displays?
@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.
@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
Awesome, thanks dave! =)