2010年01月04日

object-cで゙画像読み込み&バイナリアクセス

object-cで読み込んだ画像のバイナリーデータ(ヘッダー抜きの画像部分)にアクセスする方法。


NSString *path = @"test.png";

//load image data
NSData *dat = [NSData dataWithContentsOfFile:path];
//create bitmap data
NSBitmapImageRep *bitmap = [NSBitmapImageRep imageRepWithData:dat];

//get image info usage CGImageRef
CGImageRef imageRef = [bitmap CGImage];
UInt8 *buf = (UInt8*)CFDataGetBytePtr(CGDataProviderCopyData(CGImageGetDataProvider(imageRef)));
UInt8 bytePerPixel = CGImageGetBitsPerPixel(imageRef)/8;

//display debug info
NSLog(@"plane size:%d",[bitmap bytesPerPlane]);
NSLog(@"width:%d",CGImageGetWidth(imageRef));
NSLog(@"height:%d",CGImageGetHeight(imageRef));
NSLog(@"bytePerPixel:%d",bytePerPixel);

//display plane binary
for(int i=0;i<CGImageGetWidth(imageRef)*CGImageGetHeight(imageRef);i++)
{
for(int j=0;j<bytePerPixel;j++)
{
NSLog(@"%u",buf[i*bytePerPixel+j]);
}
}


やってる事は、NSDataでバイナリをそのまま読み込んで、NSBitmapImageRepにバイナリ渡してビットマップ形式にして貰い、そこからCGImageRef(画像情報構造体)を取得して、後はCGImageXXXX系の関数で情報取得してバイナリにアクセスです。 わざわざCGImageRefを使わなくても、NSBitmapImageRepで同じ事はできるのですが、ラッパーされてない方が落ち着くので。


posted by purigen at 18:00| Comment(0) | TrackBack(0) | object-c | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。