I would like to create a script that involves scanning through the pixels of an image so I can create an export ready variation of it. Basically, I’d like to scan from left to right, top to bottom across the image, sample the sprite as a whole at this coordinate (ie, the pixel value of what the flattened image would be), and then use this value as input for another function which is constructing a new image in a new sprite. I’m having a lot of trouble trying to sample a value and no matter what I try I am just getting 0 values back from getPixel(). How to I sample my image at a given coordinate?
you need to use two nested loops. like this:
function fMain()
-- scan through all pixels in selected cel
for yy = 0, img_h-1, 1 do
for xx = 0, img_w-1, 1 do
-- get pixel value
clr_i = img.image:getPixel(xx,yy);
end
end
this is taken from another script, so you have to provide variables: img (active cel), its width (img_w) and height (img_h).
1 Like
I would also recomment using Image:pixels(), it’s a handy iterator that let’s you do the same thing but with one loop.
3 Likes
Is there any way to sample the color from the entire image rather than just a single cell? My sprite may have multiple layers.
Not sure if there’s a simpler way but I always achieved this by making a temporary image in the size of the sprite, drawing the sprite using Image:drawSprite() on the temporary image and sampling from there.
This gives you a flat image with all the layers merged without modifying the sprite.
3 Likes