2009-08-23 10 views
3

私はカメラを使用するときにUIImagePickerControllerに表示されている画像を取得したいと思います。そして、私が得るとき、私は通常のカメラの代わりに画像と表示を処理したいと思う。iPhone:カメラのプレビューを取得

しかし、私がカメラのビューを取得したいとき、画像は黒い矩形です。

は、ここに私のコードです:私は間違って

UIView *cameraView = [[[[[[imagePicker.view subviews] objectAtIndex:0] 
         subviews] objectAtIndex: 0] 
         subviews] objectAtIndex: 0]; 

UIGraphicsBeginImageContext(CGSizeMake(320, 427)); 
[cameraView.layer renderInContext: UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

imageToDisplay.image = [PixelProcessing processImage: viewImage]; //In this case the image is black 
//imageToDisplay.image = viewImage; //In this case the image is black too 
//imageToDisplay.image = [UIImage imageNamed: @"icon.png"];  //In this case image is being displayed properly 

何をしているのですか?

ありがとうございました。

答えて

7

これも非常にうまく動作しています。

UIImage *viewImage = [[(id)objc_getClass("PLCameraController") 
         performSelector:@selector(sharedInstance)] 
         performSelector:@selector(_createPreviewImage)]; 

しかし、これまで私が見られるように、それは現在の画面の「スクリーンショット」とり、次のソリューションよりも、同じ結果をもたらす:

extern CGImageRef UIGetScreenImage(); 

CGImageRef cgoriginal = UIGetScreenImage(); 
CGImageRef cgimg = CGImageCreateWithImageInRect(cgoriginal, rect);    
UIImage *viewImage = [UIImage imageWithCGImage:cgimg];  
CGImageRelease(cgoriginal);     
CGImageRelease(cgimg); 

をカメラのプレビューが開いているときにそれを使用します私がまだ修正を見つけることができなかった問題は、どのようにオーバーレイなしでカメラの画像を非常に速く得ることができるかということです。

+1

:私はあなたのコードを使用しますが、私はまだカメラのプレビューを黒 – Seeker

0

少なくとも今のところ、これを行う方法はありません。 (公式には公式には公式には書かれていないし、非公式な方法もないとわかっている限り)

カメラのプレビューデータは、通常のグラフィックス方式をバイパスする何らかの方法でOSによって描画されている。

1

非公式呼び出しは次のとおりです。

あなたはとして@implementation上宣言する
UIGetScreenImage() 

:3.1でこれを行うには、文書化の方法があるかもしれません

extern CGImageRef UIGetScreenImage(); 

が、私はよく分かりません。そうでない場合は、Radarをアップルに提出して、何らかのスクリーングラブアクセスを公開するよう頼んでください!

これは、あなたがiPhone開発ポータルにログインした同じAppleIDを使用します。

更新:この呼び出しはまだ文書化されていませんが、Appleは明示的にOKをApp Storeアプリケーションで使用するように指定しています。

+0

どのようにUIGetScreenImageを使用していますか?スレッドで? –

+0

私はあなたがスレッドからそれを使用できるとは思わない、私はちょうど私が画面の内容を取得したいと思ったときにそれを呼んでいた - あなたは画像を生成し、処理のためのバックグラウンドスレッドに送信することができます。 –

関連する問題