Tôi đang sử dụng một số bộ lọc CoreImage để xử lý hình ảnh. Áp dụng bộ lọc cho hình ảnh đầu vào của tôi tạo ra một hình ảnh đầu ra được gọi là filterOutputImage của loại CIImage.Tạo UIImage từ CIImage
bây giờ tôi muốn hiển thị hình ảnh đó, và cố gắng thực hiện: Tuy nhiên
self.modifiedPhoto = [UIImage imageWithCIImage:filterOutputImage];
self.photoImageView.image = self.modifiedPhoto;
Quan điểm là trống - không có gì đang được hiển thị.
Nếu tôi thêm các câu lệnh ghi nhật ký để in chi tiết về cả filterOutputImage và self.modifiedPhoto, thì những câu lệnh khai báo đó cho tôi thấy rằng cả hai vars đó đều chứa dữ liệu hình ảnh hợp lệ: kích thước của chúng đang được báo cáo và các đối tượng không phải là không.
Vì vậy, sau khi thực hiện một số Googling, tôi đã tìm thấy một giải pháp yêu cầu phải trải qua một giai đoạn CGImage; vis:
CGImageRef outputImageRef = [context createCGImage:filterOutputImage fromRect:[filterOutputImage extent]];
self.modifiedPhoto = [UIImage imageWithCGImage:outputImageRef scale:self.originalPhoto.scale orientation:self.originalPhoto.imageOrientation];
self.photoImageView.image = self.modifiedPhoto;
CGImageRelease(outputImageRef);
Cách tiếp cận thứ hai này hoạt động: Tôi nhận được hình ảnh chính xác được hiển thị trong chế độ xem.
Ai đó có thể giải thích cho tôi lý do tại sao lần thử đầu tiên của tôi không thành công? Tôi đang làm gì sai với phương thức imageWithCIImage dẫn đến hình ảnh dường như tồn tại nhưng không thể hiển thị? Có luôn luôn cần phải "vượt qua" một giai đoạn CGImage để tạo ra một UIImage từ một CIImage không?
Hy vọng ai đó có thể làm sáng tỏ sự nhầm lẫn của tôi :)
H.
Ahh! Cảm ơn bạn. Có, photoImageView là UIImageView. Tôi không biết nó sử dụng tài sản CGImage của UIImage. – Hamster
Một câu hỏi nữa, trong đó tài liệu được giải thích cách UIImageView hiển thị hình ảnh của nó? Tôi đang cố gắng để tìm ra nơi bạn đã học được rằng từ :) – Hamster
Thực ra, bây giờ tôi thực sự nhìn vào mã nhị phân: UIImageView ghi đè -drawRect: thay vì gọi setContents: trên lớp riêng của nó. Dường như nó cuối cùng gọi vào các phương thức vẽ UIImage, lấy CGImageRef và vẽ nó. Vì vậy, kết quả tương tự, nhưng chi tiết của tôi đã sai. – iccir