NSImageBitmapRep 表現で作成された NSImage を反転しようとしています。掘り下げた後(Quicktimeのプレビューとキャプチャの反転とCIImage/NSImageのミラーリング)、CIImageを介して2つの方法を試し、両方の要素に-1でスケーリング変換を適用しました。
最初に 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 ビット、Lion 上の Xcode 4.3.2 です。