Sto provando a capovolgere un NSImage creato con una rappresentazione NSImageBitmapRep. Dopo alcuni scavi (Flipping Quicktime preview & capture e Mirroring CIImage/NSImage) ho provato in due modi tramite una CIImage e applicando una trasformazione di ridimensionamento con -1 per entrambi i fattori.Flip NSImage su entrambi gli assi
Prima 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];
quindi utilizzando 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];
Entrambi i modi produrre un'immagine vuota. Ho anche provato a tradurre l'immagine, nel caso in cui sia fuori dallo schermo a causa del -1 scaling, ma senza successo. Se utilizzo valori positivi per il ridimensionamento, posso vedere che la trasformazione viene applicata correttamente.
self.ivImage è un NSImageView. Voglio un NSImage effettivo che viene capovolto, quindi applicare una trasformazione a NSImageView non è un'opzione.
Questo è 32 bit, Xcode 4.3.2 su Lion.
Grazie, che ha lavorato a destra, fuori dalla scatola! :) Ed è molto più pulito senza la deviazione tramite CIImage! Le mie prove con traduzione e ridimensionamento positivo sono state lasciate per testare se la trasformazione è stata applicata del tutto. – msohn
Soluzione perfetta. Grazie per quello! –