2009-03-02 33 views
5

Khi tôi sử dụng phương pháp chuẩn [view.layer renderInContext:UIGraphicsGetCurrentContext()]; để chuyển chế độ xem thành hình ảnh trên chế độ xem máy ảnh iPhone, tất cả những gì tôi nhận được là điều khiển màu đen ở chế độ xem trước của máy ảnh.Nhận được ảnh đại diện của bản xem trước máy ảnh trong UIImagePickerController

Bất kỳ ai có giải pháp cho điều này? Tốc độ không phải là một vấn đề.

Trả lời

0

Thật không may là điều này là không thể. Để thực hiện, iPhone sử dụng một số hình thức dựng hình trực tiếp để vẽ xem trước máy ảnh trực tiếp lên màn hình thay vì như một phần của bề mặt UIView. Như vậy khi bạn "chụp" chế độ xem máy ảnh, bạn sẽ chỉ nhận được các phần tử UIView chứ không phải hình ảnh xem trước.

(FWIW này cũng tương tự như những lý do tại sao khó khăn của mình để Screengrab một số phần mềm phim trên Windows/Mac)

+0

Tôi nghĩ điều đó là có thể, vì có các ứng dụng trong AppStore rõ ràng chụp ảnh chụp màn hình của cửa sổ xem trước máy ảnh (ví dụ: QuadCam). Nếu bạn gọi UIGetScreenImage() bạn thực sự có được một hình ảnh của xem trước máy ảnh - nhưng đây là một chức năng API riêng và không nên được sử dụng. –

+0

Có, UIGetScreenImage lấy bộ đệm khung hiện tại. renderInContext vẽ phân cấp khung nhìn của khung nhìn được chỉ định vào một ngữ cảnh. Đây là những thứ khác nhau về khái niệm. –

+0

Vâng, tôi hiểu điều đó. Lý do tôi hỏi là ai đó tên "Rolando" đã đăng rằng anh ấy có cách thứ ba để lưu bản xem trước của máy ảnh dưới dạng hình ảnh, nhưng tuyên bố rằng anh ấy không thể tiết lộ thông tin do một NDA. http://blog.airsource.co.uk/index.php/2008/11/11/views-of-uiimagepickercontroller/ –

4

Không thể từ một api tài liệu, nhưng có thể. Tìm chế độ xem "PLCameraView" trong các bản xem trước của máy ảnh, sau đó gọi

CGImageRef img = (CGImageRef)[foundCameraView imageRef]; 

Điều này sẽ trả lại tham chiếu đến hình ảnh mà máy ảnh nắm giữ.

+0

Apple có từ chối ứng dụng thực hiện việc này không? –

2

Bạn có thể làm điều này với những thứ AVFoundation mới trong iOS 4.0.

Bạn có thể gọi UIGetScreenImage() (trả về UIImage) để có được ảnh chụp toàn màn hình hiện tại, bao gồm cả bản xem trước. Đó là cách tất cả các ứng dụng mã vạch hoạt động trước đây. Nhưng được cho là Apple không cho phép bây giờ và chỉ cho phép kỹ thuật AVFoundation - mà chỉ hoạt động dưới 4.0.

Toàn bộ lý do thậm chí có một vấn đề là vì UIGetScreenImage() không phải là một phần của API được ghi tài liệu, nhưng Apple đã thực hiện một ngoại lệ cụ thể để sử dụng nó. Nó không giống như họ đang kéo các ứng dụng hiện tại, nhưng họ không cho phép gửi mới (hoặc cập nhật) sử dụng kỹ thuật cũ hơn.

Có một số vận động hành lang thay mặt cho một số người thuyết phục Apple cho phép các nhà phát triển ứng dụng sử dụng kỹ thuật cũ chỉ dành cho iOS 3.x, vì vậy hãy gửi email tới quan hệ nhà phát triển nếu bạn muốn sử dụng nó.

Các vấn đề liên quan