gpt4 book ai didi

macos - 在两个轴上翻转 NSImage

转载 作者:行者123 更新时间:2023-12-03 16:08:10 25 4
gpt4 key购买 nike

我正在尝试翻转使用 NSImageBitmapRep 表示创建的 NSImage。经过一番挖掘( Flipping Quicktime preview & captureMirroring CIImage/NSImage ),我通过 CIImage 尝试了两种方法,并对这两个因素应用 -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。

最佳答案

你应该用一个大小来初始化你的NSImage

用翻译来展示你的尝试,因为这是正确的方式。通常,最简单的方法是先进行平移,然后再进行缩放。您的代码片段似乎有尝试翻译的残留痕迹,但它们是不正确的。在一种情况下平移 0,0,在另一种情况下平移 width,0。另外,在第二个代码片段中,您按 1,1(正)缩放,因此不会翻转。

此外,将焦点锁定在适当大小的新图像上、设置变换并绘制图像代表可能会更简单。使用 CIImage 避免了所有这些事情。

NSBitmapImageRep *imgRep = ...
NSImage* img = [[[NSImage alloc] initWithSize:NSMakeSize(imgRep.pixelsWide, imgRep.pixelsHigh)] autorelease];
[img lockFocus];
NSAffineTransform* t = [NSAffineTransform transform];
[t translateXBy:imgRep.pixelsWide yBy:imgRep.pixelsHigh];
[t scaleXBy:-1 yBy:-1];
[t concat];
[imgRep drawInRect:NSMakeRect(0, 0, imgRep.pixelsWide, imgRep.pixelsHigh)];
[img unlockFocus];

关于macos - 在两个轴上翻转 NSImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10936590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com