Próbuję odwrócić NSImage utworzone za pomocą reprezentacji NSImageBitmapRep. Po kilku kopaniu (Flipping Quicktime preview & capture i Mirroring CIImage/NSImage) próbowałem na dwa sposoby przez CIImage i stosując transformację skalowania z -1 dla obu czynników.Odwróć NSImage na obu osiach
Najpierw za pomocą 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];
następnie przy użyciu filtra 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];
Oba sposoby produkować pusty obraz. Próbowałem również przetłumaczyć obraz, na wypadek, gdyby był poza ekranem z powodu -1 skalowań, ale bez skutku. Jeśli użyję dodatnich wartości do skalowania, widzę, że transformacja jest poprawnie zastosowana.
self.ivImage to NSImageView. Chcę rzeczywistego NSImage, który jest odwrócony, więc zastosowanie transformacji do NSImageView nie jest opcją.
To jest 32-bitowy, Xcode 4.3.2 na Lion.
Dzięki, które działały od razu po wyjęciu z pudełka! :) I jest znacznie czystszy bez objazdu przez CIImage! Moje próby z tłumaczeniem i dodatnim skalowaniem zostały pozostawione, aby sprawdzić, czy transformacja została w ogóle zastosowana. – msohn
Idealne rozwiązanie. Dziękuję za to! –