"Selector no reconocido" al intentar acceder a la salida de CIFilterImage
Estoy experimentando con Core Image (en OS X, 10.7.3) por primera vez y me encuentro con una pared de ladrillos. Estoy seguro de que esto es algo tonto que estoy haciendo y solo necesito que alguien más familiarizado con el marco me lo señale.
onsidere el siguiente código (estipulemos queimageURL
es una URL de archivo válida que apunta a un JPG en el disco):
CIImage *inputImage = [CIImage imageWithContentsOfURL:imageURL];
CIFilter *filter = [CIFilter filterWithName:@"CIAreaAverage" keysAndValues:
kCIInputImageKey, inputImage,
kCIInputExtentKey, [inputImage valueForKey:@"extent"],
nil];
CIImage *outputImage = (CIImage *)[filter valueForKey:@"outputImage"];
Al ejecutar este código, la última línea se dispara:
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
Ahora, la Referencia del filtro de imagen principal establece claramente que CIAreaAverage "Devuelve una imagen de un solo píxel que contiene el color promedio de la región de interés". De hecho, aún más desconcertante, cuando examino los atributos del filtro en el depurador (antes de probar elvalueForKey:
llamada)
(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;
};
}
HayoutputImage
allí mismo: se proporciona como tipo CIImage!
Entonces, ¿qué estoy haciendo mal? Todos los documentos y tutoriales que he visto indican que-valueForKey:
es la forma correcta de acceder a los atributos, incluidooutputImage
.