I want to create a PIX data structure from a UIImage. The struct of PIX:
struct Pix
{
l_uint32 w; /* width in pixels */
l_uint32 h; /* height in pixels */
l_uint32 d; /* depth in bits */
l_uint32 wpl; /* 32-bit words/line */
l_uint32 refcount; /* reference count (1 if no clones) */
l_int32 xres; /* image res (ppi) in x direction */
/* (use 0 if unknown) */
l_int32 yres; /* image res (ppi) in y direction */
/* (use 0 if unknown) */
l_int32 informat; /* input file format, IFF_* */
char *text; /* text string associated with pix */
struct PixColormap *colormap; /* colormap (may be null) */
l_uint32 *data; /* the image data */
};
typedef struct Pix PIX;
struct PixColormap
{
void *array; /* colormap table (array of RGBA_QUAD) */
l_int32 depth; /* of pix (1, 2, 4 or 8 bpp) */
l_int32 nalloc; /* number of color entries allocated */
l_int32 n; /* number of color entries used */
};
How can I do this in iOS?
You can create a
CGBitmapContextand draw the image into it. You need to use the RGB color space to create the context. You may need to experiment withkCGBitmapByteOrder32LittleandkCGBitmapByteOrder32Bigin thebitmapInfoargument to get the R, G, and B components in the correct order.Then you can initialize your
struct Pixfrom that, using functions likeCGBitmapContextGetWidth,CGBitmapContextGetBytesPerRow, andCGBitmapContextGetData. Thexres,yres,informat,text, andcolormapelements don’t correspond to any attributes ofCGBitmapContextorUIImage, so you should probably set them to 0 or NULL.Take a look at the CGBitmapContext Reference for help with
CGBitmapContext.Also look at the Quartz 2D Programming Guide for help creating a bitmap context, and for help drawing your image into the context.