As a person who programmed for a long time on a J2ME platform, I know the PNG format very well. If you have the raw data as a NSData instance, looking up the information is very easy since the PNG format is very straightforward.
See PNG Specification
The PNG file starts with a signature and then it contains a sequence of chunks. You are interested only in the first chunk, IHDR.
So, the code should be along the lines of:
- Skip the first 8 bytes (signature)
- Skip 4 bytes (IHDR chunk length)
- Skip 4 bytes (IHDR chunk type = "IHDR")
- Read IHDR
Width: 4 bytes
Height: 4 bytes
Bit depth: 1 byte
Color type: 1 byte
Compression method: 1 byte
Filter method: 1 byte
Interlace method: 1 byte
For alpha, you should also check if there is a tRNS (transparency) chunk in the file. To find a chunk, you can go with the following algorithm:
- Read chunk length (4 bytes)
- Read chunk type (4 bytes)
- Check chunk type whether it is the type we are looking for
- Skip chunk length bytes
- Skip 4 bytes of CRC
- Repeat
EDIT:
To find info about a UIImage instance, get its CGImage and use one of the CGImageGet... functions.
It should be noted that All integer values in a PNG file are read in Big-endian format.