Java offers ways to process pixels fast using BufferedImage. I've made this sample to test it (2D):
There is just one character and effects made straight to the pixels. I believe that, if things should have been spread through other objects, it could need a redesign to take advantage of architetural aspects as how loops and other predictions and metadata creation are made.