More Related Content
Similar to iPhoneカメラアプリ開発入門(第1回)
Similar to iPhoneカメラアプリ開発入門(第1回) (13)
iPhoneカメラアプリ開発入門(第1回)
- 12. フォトライブラリを開く処理
ViewController.mに追加
// フォトライブラリを開く
- (IBAction)openPhotoLibrary:(id)sender {
// フォトライブラリが使えるかチェック
// カメラを開く場合
// UIImagePickerControllerSourceTypePhotoLibrary を
// UIImagePickerControllerSourceTypeCamera に変更
! if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
! {
// UIImagePickerControllerを作成し初期化 new = alloc + init
! ! UIImagePickerController* imagePicker = [UIImagePickerController new];
// カメラを開く場合 sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
// 編集可能にする場合はYES
imagePicker.allowsEditing = YES;
// 自分への通知設定
imagePicker.delegate = self;
// フォトライブラリを開く
[self presentViewController:imagePicker animated:YES
completion:^{
// 開いたタイミングに呼ばれる
NSLog(@"(1)フォトライブラリを開いた");
}];
}
}
13年5月25日土曜日
- 25. モノクロフィルタを作る
ViewController.mに追加
// グレースケール画像を作成する
-(UIImage*)monochromeFilter:(UIImage*)image{
// UIImageをCoreImageに変換する
CIImage* ciImage = [[CIImage alloc] initWithImage:image];
// CoreImageフィルタを作成する
CIFilter* ciFilter = [CIFilter filterWithName:@"CIColorMonochrome"
keysAndValues:kCIInputImageKey, ciImage,
// パラメータ:入力色(RGBのフィルタ係数)
// セピア色にするなら [CIColor colorWithRed:1.0 green:0.7 blue:0.4]
@"inputColor", [CIColor colorWithRed:1.0 green:1.0 blue:1.0],
// パラメータ(度合い)
// 0.5にすれば半分の適用度になります
@"inputIntensity", [NSNumber numberWithFloat:1.0],
nil];
// CoreImageのコンテクストを作成
CIContext* ciContext = [CIContext contextWithOptions:nil];
// フィルタを適用
CGImageRef cgImage = [ciContext createCGImage:ciFilter.outputImage fromRect:[ciFilter.outputImage extent]];
// CGImageRefをUIImageに変換
UIImage* retImage = [UIImage imageWithCGImage:cgImage scale:image.scale orientation:UIImageOrientationUp];
// CGImage開放
CGImageRelease(cgImage);
return retImage;
}
13年5月25日土曜日
- 26. フィルタを適用する
ViewController.mを修正
// 写真撮影後orサムネイル選択後に呼ばれる処理
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary
*)info
{
! // オリジナル画像
! UIImage* originalImage = (UIImage *)[info objectForKey:UIImagePickerControllerOriginalImage];
! // 編集画像
! UIImage* editedImage = (UIImage *)[info objectForKey:UIImagePickerControllerEditedImage];
UIImage* savedImage;
if(editedImage){
savedImage = editedImage;
}
else{
savedImage = originalImage;
}
// モノクロフィルタを適用してから
// 選択された画像を表示
_imageView.image = [self monochromeFilter:savedImage];
// 開いているカメラ・フォトライブラリを閉じる
[self dismissViewControllerAnimated:YES completion:^{
}];
}
13年5月25日土曜日
- 29. ケラレフィルタを作る
// ケラレフィルタ(カメラの周辺光量落ち)
-(UIImage*)vignetteFilter:(UIImage*) image{
// UIImageをCoreImageに変換する
CIImage* ciImage = [[CIImage alloc] initWithImage:image];
// CoreImageフィルタを作成する
CIFilter* ciFilter = [CIFilter filterWithName:@"CIVignette"
keysAndValues:kCIInputImageKey, ciImage,
//
@"inputRadius", [NSNumber numberWithFloat:2.0],
// パラメータ(度合い)
// 0.5にすれば半分の適用度になります
@"inputIntensity", [NSNumber numberWithFloat:1.0],
nil];
// CoreImageのコンテクストを作成
CIContext* ciContext = [CIContext contextWithOptions:nil];
// フィルタを適用
CGImageRef cgImage = [ciContext createCGImage:ciFilter.outputImage fromRect:[ciFilter.outputImage extent]];
// CGImageRefをUIImageに変換
UIImage* retImage = [UIImage imageWithCGImage:cgImage scale:image.scale orientation:UIImageOrientationUp];
// CGImage開放
CGImageRelease(cgImage);
return retImage;
}
ViewController.mに追加
13年5月25日土曜日
- 30. // 写真撮影後orサムネイル選択後に呼ばれる処理
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)in
{
! // オリジナル画像
! UIImage* originalImage = (UIImage *)[info objectForKey:UIImagePickerControllerOriginalImage];
! // 編集画像
! UIImage* editedImage = (UIImage *)[info objectForKey:UIImagePickerControllerEditedImage];
UIImage* savedImage;
if(editedImage){
savedImage = editedImage;
}
else{
savedImage = originalImage;
}
// モノクロフィルタ+ケラレフィルタを適用し、画面に表示
_imageView.image = [self vignetteFilter:[self monochromeFilter:savedImage]];
// 開いているカメラ・フォトライブラリを閉じる
[self dismissViewControllerAnimated:YES completion:^{
}];
}
モノクロフィルタ+ケラレフィルタを適用
13年5月25日土曜日
- 32. カメラロールへ保存
-(void)image:(UIImage*)image didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInfo{
if(error){
NSLog(@"Error");
}else{
NSLog(@"保存した");
}
}
ViewController.mへ追加
// 写真撮影後orサムネイル選択後に呼ばれる処理
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
! // オリジナル画像
! UIImage* originalImage = (UIImage *)[info objectForKey:UIImagePickerControllerOriginalImage];
! // 編集画像
! UIImage* editedImage = (UIImage *)[info objectForKey:UIImagePickerControllerEditedImage];
UIImage* savedImage;
if(editedImage){
savedImage = editedImage;
}
else{
savedImage = originalImage;
}
// モノクロフィルタ+ケラレフィルタを適用し、画面に表示
_imageView.image = [self vignetteFilter:[self monochromeFilter:savedImage]];
// カメラロールへ保存する
UIImageWriteToSavedPhotosAlbum(_imageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
// 開いているカメラ・フォトライブラリを閉じる
[self dismissViewControllerAnimated:YES completion:^{
}];
}
13年5月25日土曜日