Я пытаюсь перевернуть NSImage, созданный с представлением NSImageBitmapRep. После некоторого рытья (Flipping Quicktime preview & capture и Mirroring CIImage/NSImage) Я пробовал два пути через CIImage и применял масштабирующее преобразование с -1 для обоих факторов.Flip NSImage на обе оси
Во-первых, используя 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];
затем с помощью фильтра 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];
Оба способа производят пустое изображение. Я также попытался перевести изображение, если он вышел из экрана из-за масштабирования -1, но безрезультатно. Если я использую положительные значения для масштабирования, я вижу, что преобразование применяется правильно.
self.ivImage - это NSImageView. Я хочу, чтобы фактическое NSImage было перевернуто, поэтому применение преобразования в NSImageView не является вариантом.
Это 32 бит, Xcode 4.3.2 на льве.
Спасибо, что работало прямо из коробки! :) И это намного чище без обхода через CIImage! Мои испытания с переводом и положительным масштабированием были оставлены для проверки того, было ли преобразование применено вообще. – msohn
Идеальное решение. Спасибо за это! –