3

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

しかし問題は、カメラ ビューを取得したいときです。画像は単なる黒い四角形です。

これが私のコードです:

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

私は何を間違っていますか?

ありがとう。

4

3 に答える 3

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);  

私がまだ解決策を見つけていない問題は、オーバーレイなしでカメラ画像を非常に高速に取得するにはどうすればよいかということです。

于 2009-10-07T16:09:20.200 に答える
1

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

UIGetScreenImage()

@implementationの上で次のように宣言します。

extern CGImageRef UIGetScreenImage();

3.1でこれを行うための文書化された方法があるかもしれませんが、私にはわかりません。そうでない場合は、 Appleにレーダーを提出して、ある種のスクリーングラブアクセスを公開するように依頼してください。

これは、iPhone開発ポータルにログインするときに使用するのと同じAppleIDを使用します。

更新:この呼び出しはまだ文書化されていませんが、AppleはAppStoreアプリで使用することを明示的に許可しています。

于 2009-08-24T03:38:36.413 に答える
0

少なくとも今のところ、これを行う方法はありません。(確かに公式に文書化された方法はありません。また、私が知る限り、誰も非公式の方法を考え出していません。)

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

于 2009-08-23T15:07:32.197 に答える