http://journal.mycom.co.jp/column/iphone/004/index.html
画像はUIImageオブジェクトとして取得する事ができた。このクラスは、グラフィックシステムの中では上位に位置づけられており、簡単に画面に表示できる反面、ビットマップデータを取り出すような低レベルな操作を行うAPIは提供されていない。
そこで、Core Graphicsフレームワークを使おう。Core Graphicsは、Cocoaよりも低レイヤーに位置するグラフィックフレームワークで、直接画像を操作するためのAPIが色々とそろっている。ちなみに、Core GraphicsではすべてのAPIはC言語で提供されている。
表示は簡単だけど、色々加工するのはめんどくさいと言うことですね。。(^^;
UIImageから、CGImageにして、情報を取得
shrinkedImage は、UIImage // CGImageを取得する CGImageRef cgImage; cgImage = shrinkedImage.CGImage; // 画像情報を取得する size_t width; size_t height; size_t bitsPerComponent; size_t bitsPerPixel; size_t bytesPerRow; CGColorSpaceRef colorSpace; CGBitmapInfo bitmapInfo; bool shouldInterpolate; CGColorRenderingIntent intent; width = CGImageGetWidth(cgImage); height = CGImageGetHeight(cgImage); bitsPerComponent = CGImageGetBitsPerComponent(cgImage); bitsPerPixel = CGImageGetBitsPerPixel(cgImage); bytesPerRow = CGImageGetBytesPerRow(cgImage); colorSpace = CGImageGetColorSpace(cgImage); bitmapInfo = CGImageGetBitmapInfo(cgImage); shouldInterpolate = CGImageGetShouldInterpolate(cgImage); intent = CGImageGetRenderingIntent(cgImage);
そこからさらに、ビットマップデータを取得するのは下記とおり。。(BGRAの生データ)
// データプロバイダを取得する CGDataProviderRef dataProvider; dataProvider = CGImageGetDataProvider(cgImage); // ビットマップデータを取得する CFDataRef data; UInt8* buffer; data = CGDataProviderCopyData(dataProvider); buffer = (UInt8*)CFDataGetBytePtr(data);