围绕其垂直轴旋转NSImage

时间:2017-06-27 12:58:04

标签: objective-c macos nsimage catransform3d

我试图绕垂直轴旋转NSImage,保存结果。主要目的是生成具有不同旋转度的相同图像的帧阵列。我需要让该数组分别修改每个帧。单帧的期望结果如下:

https://i.stack.imgur.com/wDy3p.jpg

到目前为止,我尝试使用CATransform3DRotate制作单个旋转的NSImage,但我无法以任何方式将此变换应用于NSImage。我尝试将CATransform3DRotate应用到新创建的CALayer,甚至是一个专门创建的视图层,我能得到的最好的是和以前一样的图片。

CATransform3D t = CATransform3DRotate(CATransform3DIdentity, (60 * M_PI / 180), 0, 1, 0);
CALayer *layer = [CALayer layer];
[layer setFrame: imageRect];
[layer setContents:image];
[layer setTransform:t];
NSImage * newImage = [[NSImage alloc] initWithSize:layer.bounds.size];
[newImage lockFocus];
[layer renderInContext:[NSGraphicsContext currentContext].CGContext];
[newImage unlockFocus];

此代码导致newImage与非旋转图像相同。我也尝试了其他一些方法,但都没有成功。

也许有更简单的方法来实现我的目标(生成相同NSImage的旋转帧数组),但我不知道,它是什么。

1 个答案:

答案 0 :(得分:0)

NSImage对象无法旋转。您需要旋转视图或图层,然后将视图/图层的内容保存为图像。

有关如何将视图另存为图片,请参阅Saving an NSView to a png file?