2012-07-12 20 views
5

Tôi đang bối rối là tại sao rất nhiều chuyển đổi giữa các định dạng hình ảnh là cần thiết trong iOS. Ví dụ, nếu tôi tải một jpg vào một UIImage và sau đó muốn làm phát hiện khuôn mặt trên nó, tôi cần phải tạo một CIImage để vượt qua để CIDetector. Điều này không đại diện cho một hit trong cả bộ nhớ và hiệu suất?Tại sao có quá nhiều chuyển đổi giữa các định dạng hình ảnh cần thiết? (UIImage, CGImage, CIImage)

Đây có phải là một số điều kế thừa giữa Đồ họa cốt lõi, Hình ảnh lõi và UIKit (và có lẽ là OpenGL ES nhưng tôi không làm việc với điều đó)? Là hit tầm thường tổng thể?

Tôi sẽ làm những gì tôi cần làm nhưng tôi muốn hiểu thêm về điều này là cần thiết. Ngoài ra, tôi đã gặp phải các vấn đề đôi khi thực hiện chuyển đổi và bị rối trong sự khác biệt giữa các định dạng.


Cập nhật

Ok - vì vậy tôi chỉ có dinged một lần nữa bởi sự nhầm lẫn của tôi trên các định dạng (hoặc sự nhầm lẫn trong các định dạng ...). Đã lãng phí nửa giờ. Đây là những gì tôi đang làm:

Testing cho khuôn mặt trong một hình ảnh địa phương, tôi đã tạo ra CIImage cần thiết với:.

CIImage *ciImage = [image CIImage]; 

và đã không nhận được bất kỳ tính năng lại không có vấn đề gì hướng tôi trôi qua trong I biết hình ảnh cụ thể này đã hoạt động với CIDetectorTypeFace trước mà tôi đã gặp sự cố với định dạng CIImage. Người cố gắng tạo CCImage như thế này:

CIImage *ciImage = [CIImage imageWithCGImage:image.CGImage]; 

và tính năng Phát hiện khuôn mặt hoạt động tốt. Arrgh! Tôi đã chắc chắn với [image CIImage] rằng CIImage kết quả không phải là không. Vì vậy, tôi bối rối. Cách tiếp cận đầu tiên chỉ nhận được một con trỏ trong khi thứ hai tạo ra một CIImage mới. Điều đó có tạo sự khác biệt không?

Đào vào file UIImage.h tôi thấy như sau:

// returns underlying CGImageRef or nil if CIImage based 
@property(nonatomic,readonly) CGImageRef CGImage; 

// returns underlying CIImage or nil if CGImageRef based 
@property(nonatomic,readonly) CIImage  *CIImage; 

Vì vậy, tôi đoán đó là chìa khóa - Developer Cẩn thận: kiểm tra cho nil ...

Trả lời

0

Lý do là trong quan niệm. Tất cả UIKit, CoreGraphics và CoreImage đều thực hiện ba điều cơ bản khác nhau mà không thể là một 'định dạng hình ảnh thống nhất trung tâm lớn'. Ngoài ra, các khuôn khổ này hợp tác tốt; mà nói, việc chuyển đổi phải được tối ưu hóa và càng nhanh càng tốt, nhưng tất nhiên việc xử lý ảnh luôn là một hoạt động tương đối tốn kém về mặt tính toán.