2012-02-01 3 views
10

일부 CoreImage 필터를 사용하여 이미지를 처리하고 있습니다. 입력 된 이미지에 필터를 적용하면 CIImage 유형의 filterOutputImage라는 출력 이미지가 생성됩니다.CIImage에서 UIImage 만들기

는 지금 그 이미지를 표시 할, 그리고 일을 시도 :

self.modifiedPhoto = [UIImage imageWithCIImage:filterOutputImage]; 
self.photoImageView.image = self.modifiedPhoto; 

뷰 그러나 비어 - 아무것도 표시되지되고있다.

filterOutputImage 및 self.modifiedPhoto에 대한 세부 정보를 출력하는 logging 문을 추가하면 해당 로깅 문에 두 개의 var에 합법적 인 이미지 데이터가 포함되어있는 것으로 표시됩니다. 크기가보고되고 개체가 nil이 아닙니다.

그래서 Google 검색을 수행 한 후 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); 

이 두 번째 방법은 다음과 같습니다. 올바른 이미지가 뷰에 표시됩니다.

누군가 내 첫 시도가 실패한 이유를 설명해 줄 수 있습니까? 존재하지만 보이지 않을 수있는 이미지를 생성하는 imageWithCIImage 메서드로 잘못된 것은 무엇입니까? CIImage에서 UIImage를 생성하려면 항상 CGImage 스테이지를 "통과"해야합니까?

희망 누군가가 내가 self.photoImageView가있는 UIImageView라고 가정 내 혼란 :

H.

답변

8

을 취소 할 수 있습니까? 그렇다면 궁극적으로 UIImage에서 -[UIImage CGImage]을 호출 한 다음 해당 CGImage를 CALayer의 contents 속성으로 전달합니다.

(주석을 참조하십시오 : 내 세부 잘못했다)이있는 UIImage 문서 당

-[UIImage CGImage]에 대한 :

If the UIImage object was initialized using a CIImage object, the 
value of the property is NULL. 

는 그래서있는 UIImageView는 -CGImage를 호출하지만 그렇게 아무것도 표시되지 않습니다, NULL을 초래한다.

나는 이것을 시도하지 않았지만 사용자 지정 UIView를 만든 다음 메서드를 사용하여 -[UIView drawRect:]에서 UIImage를 그리면 CIImage를 그릴 수 있습니다.

+0

아! 고맙습니다. 예, photoImageView는 UIImageView입니다. UIImage의 CGImage 속성을 사용했는지 전혀 알지 못했습니다. – Hamster

+0

UIImageView에서 이미지를 표시하는 방법에 대해 설명하는 문서가 하나 더 있습니다. 나는 당신이 그것을 배웠던 곳을 찾으려고 노력하고있다. – Hamster

+0

사실, 이제 내가 바이너리 코드를 실제로 보았 기 때문에 : UIImageView가 -drawRect를 오버라이드한다 : 자체 CALayer에서 setContents :를 호출하는 것이 아니다. 궁극적으로 UIImage 드로잉 메서드를 호출하는 것처럼 보입니다. CGImageRef를 가져 와서 그립니다. 그래서, 같은 결과지만, 내 세부 사항이 잘못되었습니다. – iccir

15

이렇게해야합니다.

-(UIImage*)makeUIImageFromCIImage:(CIImage*)ciImage 
{ 
    self.cicontext = [CIContext contextWithOptions:nil]; 
    // finally! 
    UIImage * returnImage; 

    CGImageRef processedCGImage = [self.cicontext createCGImage:ciImage 
                 fromRect:[ciImage extent]]; 

    returnImage = [UIImage imageWithCGImage:processedCGImage]; 
    CGImageRelease(processedCGImage); 

    return returnImage; 
}