[iPhone SDK] UIImageでピクセルを扱う
Quartz 2DまわりのAPIを使い,UIImageからCGImageRefを経由してピクセルの値を取得することができる.
UIImage* source = [UIImage imageNamed:@"image.png"]; CGImageRef inputImage = [source CGImage];
これでCGImageのポインタを取得できる.CGImageからは,CGImageGetDataProviderとCFDataGetBytePtrを使い,ピクセルの値やピクセルのデータサイズ,1行ごとのバイトサイズなどを取得できる.
CFDataRef inputData = CGDataProviderCopyData(CGImageGetDataProvider(inputImageRef)); unsigned char *pixelData = (unsigned char *) CFDataGetBytePtr(inputData); int length = CFDataGetLength(inputData); size_t width = CGImageGetWidth(inputImageRef); size_t height = CGImageGetHeight(inputImageRef); size_t bitsPerComponent = CGImageGetBitsPerComponent(inputImageRef); size_t bitsPerPixel = CGImageGetBitsPerPixel(inputImageRef); size_t bytesPerRow = CGImageGetBytesPerRow(inputImageRef); CGColorSpaceRef colorspace = CGImageGetColorSpace(inputImageRef); CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(inputImageRef); for (int index = 0; index < length; index += 4 ) { unsigned char red = *(pixelData + index); unsigned char green = *(pixelData + index + 1); unsigned char blue = *(pixelData + index + 2); unsigned char alpha = *(pixelData + index + 3); }
ビットの並びはRGBAのようです.