paxswill
paxswill

Reputation: 1200

NSBitmapImageRep for iPhone (Or direct pixel access for CGImage)?

Is there a good analog to NSBitmapImageRep in UIKit? Specifically I'm looking for similar methods to setPixel:atX:y: and getPixel:atX:y:. I have found this technote, and it does get me most of the way there using CGImage, but how do I know what order the pixels are in?

Upvotes: 5

Views: 4566

Answers (1)

drawnonward
drawnonward

Reputation: 53679

CGImageGetBitsPerComponent( image );
CGImageGetBitsPerPixel( image );
CGImageGetBytesPerRow( image );
CGImageGetBitmapInfo( image );
CGColorSpaceGetModel( CGImageGetColorSpace( image ) );
CGColorSpaceGetNumberOfComponents( CGImageGetColorSpace( image ) );

Using the above calls, you can figure out how each pixel is laid out. Each pixel for x,y will start at:

length = CGImageGetBitsPerPixel(image)/CHAR_BIT;
offset = y*CGImageGetBytesPerRow(image) + x*length;

A typical 32 bit ARGB PNG might be:

8 = CGImageGetBitsPerComponent( image );
32 = CGImageGetBitsPerPixel( image );
kCGImageAlphaFirst = CGImageGetBitmapInfo( image );
4 = CGColorSpaceGetNumberOfComponents( CGImageGetColorSpace( image ) );
kCGColorSpaceModelRGB = CGColorSpaceGetNumberOfComponents( CGImageGetColorSpace( image ) );

Upvotes: 4

Related Questions