【问题标题】:Rotate NSImage around its vertical axis围绕垂直轴旋转 NSImage
【发布时间】:2017-11-30 13:04:14
【问题描述】:

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

到目前为止,我一直在尝试使用 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 的旋转帧数组),但我不知道它是什么。

【问题讨论】:

  • 你为什么不直接使用Core Image?
  • 这是我发现的围绕垂直轴应用 3d 旋转的唯一方法。
  • @Deimos 你好!你设法得到这个工作吗?有同样的问题:)

标签: objective-c macos nsimage catransform3d


【解决方案1】:

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

请参阅Saving an NSView to a png file? 了解如何将视图另存为图像。

【讨论】:

  • 这正是我想要做的。我发布的代码是我尝试旋转 CALayer 并将其保存回 NSImage。主要问题是结果图像没有旋转,我不明白为什么。
猜你喜欢
  • 1970-01-01
  • 2021-06-18
  • 2022-01-24
  • 2017-02-10
  • 2019-10-18
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多