I presume, if you're storing your graphics in .png format, that you then have to have a routine to convert those graphics into raw bitplane data ready for display?
Why not just use raw data to start with and crunch it with a data cruncher prior to storing? Then just uncrunch the data as necessary as and when you load it.