2017-06-27 34 views
0

NSImageを垂直軸の周りに回転して結果を保存しようとしています。主な目的は、異なる回転角度の同じ画像のフレームの配列を生成することです。私は別々に各フレームを変更するためにその配列を持つ必要があります。単一のフレームのための望ましい結果以下の通りです:NSImageを垂直軸の周りに回転する

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

これまでのところ、私は、単一の回転NSImageではを作るためにCATransform3DRotateを使用しようとしていたが、私は、これはどのような方法でNSImageではに変換を適用することはできませんよ。私は新しく作成されたCALayerにCATransform3DRotateを適用しようとしました。さらに、特別に作成されたビューのレイヤーにも、私が得ることのできる最高のものは前と同じです。

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の回転フレームの配列を生成する)かもしれませんが、私はそれが何であるか分かりません。

+0

Core Imageを使ってみませんか? –

+0

これは、私が見つけた垂直軸を中心に3d回転を適用する唯一の方法でした。 – Deimos

答えて

0

NSImageオブジェクトはローテーションできません。ビューまたはレイヤーを回転し、ビュー/レイヤーの内容をイメージとして保存する必要があります。

ビューをイメージとして保存する方法は、Saving an NSView to a png file?を参照してください。

+0

これはまさに私がやろうとしていることです。私が投稿したコードは、CALayerを回転させてNSImageに保存しようとした私の試みです。主な問題は、結果イメージが回転されず、なぜ私は理解できないということです。 – Deimos

関連する問題