Upload
colin-guerrero
View
29
Download
0
Embed Size (px)
DESCRIPTION
第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝. はじめに. 画像処理クラスの作成及び動作. 画像処理の流れ. Picker の作成 Interface の作成 Interface と接続. iPhone 上で画像選択. 画像情報の取得. 選択画像の取得 グラフィックスコンテキストの作成 画像の縮小・拡大. ビットマップデータの取得 RGB 値の取得 画像処理操作. 画像処理. 画像の描画. 処理画像の表示 作成データの解放. オフスクリーン描画. 直接画面に描写せず、 - PowerPoint PPT Presentation
Citation preview
第7回 iPhone アプリ勉強会画像処理クラスの作成
縣 禎輝
はじめに
画像処理クラスの作成及び動作
画像処理の流れ
iPhone 上で画像選択
画像情報の取得
画像処理
画像の描画
Picker の作成Interface の作成Interface と接続
選択画像の取得グラフィックスコンテキストの作成画像の縮小・拡大
ビットマップデータの取得RGB 値の取得画像処理操作
処理画像の表示作成データの解放
オフスクリーン描画直接画面に描写せず、 イメージクラスのインスタンスに描画
しておいて、処理後に画面に転送する という方法
メリット : 再描画の際、処理時間が減る
画像の選択
- (void)imagePickerController:(UIImagePickerController*)picker
didFinishPickingImage:(UIImage*)image
editingInfo:(NSDictionary*)editingInfo
UIImage というクラスのオブジェクトがわたってくる
第三の引数である editingInfo キーとして UIImagePickerControllerOriginalImage
を指定する事でオリジナルデータの UIImage オブジェクトを取り出す事ができる(画像サイズ1200×1600 )
選択画像のクラス画像サイズ 320×320
画像情報の取得①// オリジナル画像を取得する UIImage* originalImage; originalImage = [editingInfo
objectForKey:UIImagePickerControllerOriginalImage]; // グラフィックスコンテキストを作る(画像表示領域) CGSize size = { 300, 400 }; UIGraphicsBeginImageContext(size);
グラフィックスコンテキストグラフィックスを描画するための情報 ( 描画属性 ) を格納しておくためのもので , これがないと画像の描画が行え ない
画像情報の取得②// 画像を縮小して描画する CGRect rect; rect.origin = CGPointZero; rect.size = size; [originalImage drawInRect:rect];
drawInRect (メソッド)現在のコンテキストに対して、指定した大きさ
で 画像の描画を行うもの
// 描画した画像を取得する UIImage* shrinkedImage; shrinkedImage =
UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
画像情報の取得③ CGImage
・画像の詳細な情報を取得する事ができる(画像の幅、 高さ、ピクセルの要素毎のビット数、ピクセル毎の ビット数、画像 1 行のバイト数) ・ UIImage オブジェクトから取り出す事ができる
// CGImage を取得する CGImageRef cgImage;
cgImage = shrinkedImage.CGImage;
// 画像情報を取得する size_t width;
size_t height;
size_t bitsPerComponent;
:
ビットマップデータの取得 CGDataProvider (オブジェクト)
画像の元データを取得するCGImageGetDataProvider でCGImage から CGDataProvider を取り出し
CGDataProviderCopyData ( API )でビットマップデータを取得
// データプロバイダを取得する CGDataProviderRef dataProvider; dataProvider = CGImageGetDataProvider(cgImage); // ビットマップデータを取得する CFDataRef data; UInt8* buffer; data = CGDataProviderCopyData(dataProvider); buffer = (UInt8*)CFDataGetBytePtr(data);
ビットマップデータの取得 CFData からポインタを取り出す
NSUInteger i, j; for (j = 0; j < height; j++) { for (i = 0; i < width; i++) { // ピクセルのポインタを取得する UInt8* tmp; tmp = buffer + j * bytesPerRow + i * 4; // RGB の値を取得する UInt8 r, g, b; r = *(tmp + 3); g = *(tmp + 2); b = *(tmp + 1);
画像処理 // 輝度値を計算する UInt8 y; y = (77 * r + 28 * g + 151 * b) / 256;
//2値化if(y < 118)
y=0;else
y=255; // 輝度の値を RGB値として設定する *(tmp + 1) = y; *(tmp + 2) = y; *(tmp + 3) = y;
画像の描画 // 効果を与えたデータを作成する CFDataRef effectedData; effectedData = CFDataCreate(NULL, buffer,
CFDataGetLength(data)); // 画像を作成する CGImageRef effectedCgImage; UIImage* effectedImage; effectedCgImage = CGImageCreate( width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, bitmapInfo, effectedDataProvider, NULL, shouldInterpolate, intent); effectedImage = [[UIImage alloc]
initWithCGImage:effectedCgImage]; [effectedImage autorelease]; // 画像を表示する _imageView.image = effectedImage;
おわりに
画像処理クラスの作成及び動作