第7回 iphone アプリ勉強会 画像処理クラスの作成 縣 禎輝

13
iPhone 第第第第第第 第第第第第第第第第第 第 第第

Upload: colin-guerrero

Post on 01-Jan-2016

29 views

Category:

Documents


0 download

DESCRIPTION

第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝. はじめに. 画像処理クラスの作成及び動作. 画像処理の流れ. Picker の作成 Interface の作成 Interface と接続. iPhone 上で画像選択. 画像情報の取得. 選択画像の取得 グラフィックスコンテキストの作成 画像の縮小・拡大. ビットマップデータの取得 RGB 値の取得 画像処理操作. 画像処理. 画像の描画. 処理画像の表示 作成データの解放. オフスクリーン描画. 直接画面に描写せず、 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝

第7回 iPhone アプリ勉強会画像処理クラスの作成

      縣 禎輝

Page 2: 第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝

はじめに

画像処理クラスの作成及び動作

Page 3: 第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝

画像処理の流れ

iPhone 上で画像選択

画像情報の取得

画像処理

画像の描画

Picker の作成Interface の作成Interface と接続

選択画像の取得グラフィックスコンテキストの作成画像の縮小・拡大

ビットマップデータの取得RGB 値の取得画像処理操作

処理画像の表示作成データの解放

Page 4: 第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝

オフスクリーン描画直接画面に描写せず、 イメージクラスのインスタンスに描画

しておいて、処理後に画面に転送する という方法

メリット : 再描画の際、処理時間が減る

Page 5: 第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝

画像の選択

- (void)imagePickerController:(UIImagePickerController*)picker 

        didFinishPickingImage:(UIImage*)image 

        editingInfo:(NSDictionary*)editingInfo

UIImage というクラスのオブジェクトがわたってくる

第三の引数である editingInfo キーとして UIImagePickerControllerOriginalImage

を指定する事でオリジナルデータの UIImage オブジェクトを取り出す事ができる(画像サイズ1200×1600 )

選択画像のクラス画像サイズ 320×320

Page 6: 第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝

画像情報の取得①// オリジナル画像を取得する    UIImage*    originalImage;    originalImage = [editingInfo

objectForKey:UIImagePickerControllerOriginalImage];    // グラフィックスコンテキストを作る(画像表示領域)    CGSize  size = { 300, 400 };    UIGraphicsBeginImageContext(size);

グラフィックスコンテキストグラフィックスを描画するための情報 ( 描画属性 ) を格納しておくためのもので , これがないと画像の描画が行え ない

        

Page 7: 第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝

画像情報の取得②// 画像を縮小して描画する    CGRect  rect;    rect.origin = CGPointZero;    rect.size = size;    [originalImage drawInRect:rect];

drawInRect (メソッド)現在のコンテキストに対して、指定した大きさ

で 画像の描画を行うもの

// 描画した画像を取得する    UIImage*    shrinkedImage;    shrinkedImage =   

UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();

Page 8: 第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝

画像情報の取得③ CGImage

・画像の詳細な情報を取得する事ができる(画像の幅、    高さ、ピクセルの要素毎のビット数、ピクセル毎の  ビット数、画像 1 行のバイト数) ・ UIImage オブジェクトから取り出す事ができる

// CGImage を取得する    CGImageRef  cgImage;

    cgImage = shrinkedImage.CGImage;

    

// 画像情報を取得する    size_t                  width;

    size_t                  height;

    size_t                  bitsPerComponent;

Page 9: 第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝

ビットマップデータの取得 CGDataProvider (オブジェクト)

画像の元データを取得するCGImageGetDataProvider でCGImage から CGDataProvider を取り出し

CGDataProviderCopyData ( API )でビットマップデータを取得

// データプロバイダを取得する    CGDataProviderRef   dataProvider;    dataProvider = CGImageGetDataProvider(cgImage);        // ビットマップデータを取得する    CFDataRef   data;    UInt8*      buffer;    data = CGDataProviderCopyData(dataProvider);    buffer = (UInt8*)CFDataGetBytePtr(data);

Page 10: 第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝

ビットマップデータの取得 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);            

Page 11: 第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝

画像処理 // 輝度値を計算する            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;         

Page 12: 第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝

画像の描画    // 効果を与えたデータを作成する    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;

Page 13: 第7回 iPhone アプリ勉強会 画像処理クラスの作成 縣 禎輝

おわりに

画像処理クラスの作成及び動作