Have you written a rendering engine for any other graphics files before?
I'm completely confused by what you have written, and at the moment it seems as if you are missing some key basic knowledge about dealing with image formats.
For instance, all graphics files are made up of pixels. A pixel is composed of 3 values. Red Green and Blue. An optional 4th value is Alpha which sets the transparency. These are usual one byte each.
The amount of physical space (either in memory or on disk) used to store each pixel is referred to as 'bit depth'.
Some bit depths are 32bit (1 byte for each, red green blue and alpha) 24bit (1 byte for each, red green and blue, no alpha channel), 16bit(stored in two bytes, 5bits for red, 6bits for green, 5bits for blue) and there are still more.
Usually image data is stored in data streams where pixels and written one after another to a file. For instance FF0000FF0000 in in 24bit RGB would be two red pixels.
Sometimes however a 'palette' is used. In this case there will be a table laying out a certain number of available colors (usually 255) and each pixel is stored as a single byte which is the index in the color table where the color for that pixel will be found.
PNG files use everything I've mentioned so far and more.
To properly render PNG files you have to be able to use the Deflate algorithm to decompress the PNG's data stream(s) and then using everything above, rewrite the pixels in a given area of a control or window.
I'll be honest with you, I don't understand everything about how a PNG works. I could take the time to write a custom renderer from scratch and therefore be able to explain it in depth, but that would take a LOT of time. I really don't want to invest that time because I have other projects that I'm working on at the moment and I have no need for that code, since in my native (programming) language, PNG is supported by my API.
I wish you luck, and by all means stay committed to figuring it out, but I would recommend that you learn the basics of image files in general before tackling PNGs.
Slightly off topic. Your task is made slightly more difficult by the fact that java doesn't support unsigned bytes. Or so I've read anyway. This just confuses me to no end. Why not?