처음으로 Core Image (OS X, 10.7.3)를 실험 중이며 벽돌 벽을 실행 중입니다. 나는 이것이 내가 어리석은 일이라고 확신한다. 그리고 나에게 그것을 지적하기위한 틀을 더 잘 알고있는 누군가가 필요하다. 이 코드를 실행하는 경우CIFilter의 outputImage에 액세스하려고 시도 할 때 "인식 할 수없는 선택기"
CIImage *inputImage = [CIImage imageWithContentsOfURL:imageURL];
CIFilter *filter = [CIFilter filterWithName:@"CIAreaAverage" keysAndValues:
kCIInputImageKey, inputImage,
kCIInputExtentKey, [inputImage valueForKey:@"extent"],
nil];
CIImage *outputImage = (CIImage *)[filter valueForKey:@"outputImage"];
이, 마지막 줄 트리거
:
다음 코드를 고려 (의이 imageURL
디스크에 JPG를 가리키는 유효한 파일 URL이라고 규정하자)
0 CoreFoundation 0x00007fff96c2efc6 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff9153cd5e objc_exception_throw + 43
2 CoreFoundation 0x00007fff96cbb2ae -[NSObject doesNotRecognizeSelector:] + 190
3 CoreFoundation 0x00007fff96c1be73 ___forwarding___ + 371
4 CoreFoundation 0x00007fff96c1bc88 _CF_forwarding_prep_0 + 232
5 CoreImage 0x00007fff8f03c38d -[CIAreaAverage outputImage] + 52
6 Foundation 0x00007fff991d8384 _NSGetUsingKeyValueGetter + 62
7 Foundation 0x00007fff991d8339 -[NSObject(NSKeyValueCoding) valueForKey:] + 392
이제 Core Image Filter Reference에는 CIAreaAverage가 "관심 영역의 평균 색상을 포함하는 단일 픽셀 이미지를 반환합니다."라고 명시되어 있습니다. 사실, 더 이해할 수, I 필터합니다 (valueForKey:
전화를 시도하기 전에) 디버거에서 속성을 검사 할 때 :
(lldb) po [filter attributes]
(id) $3 = 0x00007fb3e3ef0e00 {
CIAttributeDescription = "Calculates the average color for the specified area in an image, returning the result in a pixel.";
CIAttributeFilterCategories = (
CICategoryReduction,
CICategoryVideo,
CICategoryStillImage,
CICategoryBuiltIn
);
CIAttributeFilterDisplayName = "Area Average";
CIAttributeFilterName = CIAreaAverage;
CIAttributeReferenceDocumentation = "http://developer.apple.com/cgi-bin/apple_ref.cgi?apple_ref=//apple_ref/doc/filter/ci/CIAreaAverage";
inputExtent = {
CIAttributeClass = CIVector;
CIAttributeDefault = "[0 0 640 80]";
CIAttributeDescription = "A rectangle that specifies the subregion of the image that you want to process.";
CIAttributeDisplayName = Extent;
CIAttributeType = CIAttributeTypeRectangle;
CIUIParameterSet = CIUISetBasic;
};
inputImage = {
CIAttributeClass = CIImage;
CIAttributeDescription = "The image to process.";
CIAttributeDisplayName = Image;
CIUIParameterSet = CIUISetBasic;
};
outputImage = {
CIAttributeClass = CIImage;
};
}
바로 outputImage
을있다 - 타입 CIImage로 제공!
그래서 내가 뭘 잘못하고 있니? 필자가 보았던 모든 문서 및 자습서에서는 이 outputImage
을 포함하여 속성에 액세스하는 올바른 방법임을 나타냅니다.
가 흠 ... 뭔가 내가 기대 한 것 없습니다. 나는 오늘 밤 이것을 확인하고 다시 너에게 갈거야. 감사! –
나는 이것이 당신을 위해 일했는지 여부를 알고 싶어합니다. – devguydavid
미안하지만, 나는 잊지 않았다, 나는 방금 다른 일로 가득 찼다. (그리고 이것은 "개인 호기심"프로젝트를위한 것이다.) 나는 내가 다시 게시 할 것을 약속한다. –