Estoy intentando voltear un NSImage creado con una representación NSImageBitmapRep. Después de algunas excavaciones (Flipping Quicktime preview & capture y Mirroring CIImage/NSImage) probé de dos maneras a través de un CIImage y aplicando una transformación de escala con -1 para ambos factores.Flip NSImage en ambos ejes
En primer lugar usando CIImage imageByApplyingTransform:
NSBitmapImageRep *imgRep = ...
CGImageRef cgi = [imgRep CGImage];
CIImage *cii = [CIImage imageWithCGImage:cgi];
CGAffineTransform at = CGAffineTransformTranslate(CGAffineTransformMakeScale(-1, -1), 0, 0);
NSCIImageRep *ciiRep = [NSCIImageRep imageRepWithCIImage:[cii imageByApplyingTransform:at]];
NSImage *img = [[[NSImage alloc] init] autorelease];
[img addRepresentation:ciiRep];
[self.ivImage setImage:img];
a continuación, utilizando un filtro CIAffineTransform:
NSBitmapImageRep *imgRep = ...
CGImageRef cgi = [imgRep CGImage];
CIImage *cii = [CIImage imageWithCGImage:cgi];
CIFilter *f = [CIFilter filterWithName:@"CIAffineTransform"];
NSAffineTransform *t = [NSAffineTransform transform];
[t scaleXBy:1.0 yBy:1.0];
//[t translateXBy:width yBy:0];
[f setValue:t forKey:@"inputTransform"];
[f setValue:cii forKey:@"inputImage"];
CIImage *cii2 = [f valueForKey:@"outputImage"];
NSCIImageRep *ciiRep = [NSCIImageRep imageRepWithCIImage:cii2];
NSImage *img = [[[NSImage alloc] init] autorelease];
[img addRepresentation:ciiRep];
[self.ivImage setImage:img];
Ambas formas producen una imagen en blanco. También traté de traducir la imagen, en caso de que esté fuera de la pantalla debido a las escalas de -1, pero fue en vano. Si uso valores positivos para la escala, puedo ver que la transformación se aplica correctamente.
self.ivImage es un NSImageView. Quiero un NSImage real que se voltee, por lo que aplicar una transformación al NSImageView no es una opción.
Esto es 32bits, Xcode 4.3.2 en Lion.
Gracias, que trabajaron nada más sacarlo de la caja! :) ¡Y es mucho más limpio sin el desvío a través de CIImage! Mis pruebas con traducción y escalado positivo se dejaron para probar si la transformación se aplicó en absoluto. – msohn
Solución perfecta. ¡Gracias por eso! –