2008年12月12日金曜日

【iPhone SDK】UIImage, CGImageRefの基本:拡大縮小

次のような変数があるとする。
UIImage *image;
まず、CGImageRef型を得る。
CGImageRef imageRef = [image CGImage];
画像の情報を得る
size_t width = CGImageGetWidth(imageRef);
size_t height = CGImageGetHeight(imageRef);
size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef);
size_t bitsPerPixel = CGImageGetBitsPerPixel(imageRef);
size_t bytesPerRow = CGImageGetBytesPerRow(imageRef);


画像のサイズを変更する;拡大縮小
UIImage *resized;
size_t newWith = ...;
size_t newHeight = ...;
UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight));
[input drawInRect:CGRectMake(0, 0, newWidth, newHeight)];
resized = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

ピクセル単位にアクセスする。
CGImageRef inputImageRef = [resized CGImage];
CFDataRef inputDataRef = CGDataProviderCopyData(CGImageGetDataProvider(inputImageRef));
unsigned char *pixelData = (unsigned char*) CFDataGetBytePtr(inputDataRef);
int length = CFDataGetLength(inputDataRef);

ピクセルデータから画像構築。
CGDataProviderRef dataProviderRef;
dataProviderRef = CGDataProviderCreateWithData(NULL, pixelData, width2*height2*4, NULL);
CGImageRef newImageRef = CGImageCreate(width2, height2, bitsPerComponent, bitsPerPixel, bytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaLast, dataProviderRef, NULL, 0, kCGRenderingIntentDefault);

ImageRefからUIImageを得る。
UIImage *newImage = [[UIImage alloc] initWithCGImage:newImageRef];

0 件のコメント:

コメントを投稿

登録 コメントの投稿 [Atom]

この投稿へのリンク:

リンクを作成

<< ホーム