2009-03-02 70 views
5

當我使用標準[view.layer renderInContext:UIGraphicsGetCurrentContext()];方法在iPhone相機模態視圖中將視圖轉換爲圖像時,我所得到的僅僅是相機預覽位置處的黑色控件。獲取UIImagePickerController中相機預覽的圖像表示

任何人都有解決方案嗎?速度不是問題。

回答

0

不幸的是,這是不可能的。爲了提高性能,iPhone使用某種形式的直接渲染將相機預覽直接繪製到屏幕上,而不是作爲UIView表面的一部分。因此,當您「捕捉」相機視圖時,您將僅獲取UIView元素,而不是預覽圖像。

(FWIW這是類似的原因,其難度screengrab在Windows/Mac的一些電影軟件)

+0

我認爲這應該是可能的,因爲AppStore中有應用程序可以清楚地截取相機預覽窗口(例如QuadCam)。 如果你調用UIGetScreenImage(),你實際上得到了一個相機預覽的圖像 - 但這是一個私有的API函數,不應該被使用。 – 2009-03-02 06:06:48

+0

是的,UIGetScreenImage抓取當前幀緩衝區。 renderInContext將指定視圖的視圖層次結構繪製到上下文中。這些在概念上是不同的東西。 – 2009-03-02 06:50:05

4

不可能從記錄的API,但有可能。在相機的子視圖中找到「PLCameraView」視圖,然後致電

CGImageRef img = (CGImageRef)[foundCameraView imageRef]; 

這將返回對相機保存的圖像的引用。

2

您可以在iOS版4.0新AVFoundation東西做到這一點。

您應該能夠調用UIGetScreenImage()(返回一個UIImage)來獲取當前捕獲的整個屏幕,包括預覽。這就是所有條形碼應用程序以前的工作方式。但據推測,蘋果現在禁止這種做法,只允許AVFoundation技術 - 只能在4.0以下。

甚至有一個問題的全部原因是因爲UIGetScreenImage()不是被記錄的API的一部分,但是蘋果公​​司爲使用它提供了特定的例外。這不像他們正在拉動當前的應用程序,但他們不允許使用舊技術的新提交(或更新)。

有一些遊說人代表許多人說服蘋果公司讓應用程序開發人員僅將舊技術用於iOS 3.x,因此如果您想使用它,請發送電子郵件給開發者關係。