# How do I set a single pixel of an image in Slick2D?

I would like to set an individual pixel in Slick (i.e Image.setPixel(x, y, r, b, g)) but I can't figure out how.

There is an Image.setPixel function but it doesn't take x and y coordinates. Any ideas?

You're in luck.

In Slick2D, Image has a function called getGraphics, which will return you a Slick2D graphics context.

While the graphics context does not have a setPixel function, it does have a fillRect function that you can use to set a single pixel.

Graphics g = img.getGraphics();
g.setColor(color);
g.fillRect(x,y,1,1);
g.flush();//IMPORTANT!!!


I just tried this out myself, which is how I discovered the importance of the flush call. Also check out the example ImageGraphcisTest.java in the Slick2D src folder.

• A bit slow (when you are trying to set an 1000x1000 sized image with a different colour for each) but it works! Thanks! :) – Darestium Mar 10 '12 at 0:13
• In that case, I recommend only flushing once. (Amused by obious bathroom reference) – PlayDeezGames Mar 10 '12 at 13:43
• ahaha! lol, suprisingly I didn't even relate flush with a bathroom until now. – Darestium Mar 10 '12 at 22:22

If you really want to make this from an Image object then you must:

• Get the texture with img.getTexture()
• Retrieve the inherent pixel data with texture.getTextureData()
• Parse the byte-array until you reach the pixel (x, y)
• Change the RGB value of this pixel
• image(x, y) = image[y * width + x] ;) – Shaun Wild Feb 20 at 11:02