CoreImageのCIPerspectiveTransformフィルターを適切に実装する方法を明確に説明しているドキュメントをオンラインで見つけるのに非常に苦労しています。特に、、、、、およびのCIVector値を設定する場合、これらinputTopLeft
のベクトルは画像に対して何をしますか?(つまり、これらのベクトルが私の画像を歪める方法の背後にある数学は何ですか?)inputTopRight
inputBottomRight
inputBottomLeft
現在、これは私が使用しているコードです。クラッシュしませんが、画像は表示されません。
CIImage *myCIImage = [[CIImage alloc] initWithImage:self.image];
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter = [CIFilter filterWithName:@"CIPerspectiveTransform" keysAndValues:@"inputImage", myCIImage, @"inputTopLeft", [CIVector vectorWithX:118 Y:484], @"inputTopRight", [CIVector vectorWithX:646 Y:507], @"inputBottomRight", [CIVector vectorWithX:548 Y:140], @"inputBottomLeft", [CIVector vectorWithX:155 Y:153], nil];
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *transformedImage = [UIImage imageWithCGImage:cgimg];
[self setImage:transformedImage];
CGImageRelease(cgimg);
重要かもしれない他の注意事項:
私のUIImageView(75pts x 115 pts)は、すでにawakeFromNibを介して初期化されており、すでに画像(151px x 235px)が関連付けられています。
上記のコードは、UIImageViewの
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
関数に実装されています。画面の座標に基づいて画像の遠近感を調整し、画像が3D空間で動いているように見せることができれば幸いです。このコードはiPhoneアプリ用です。
繰り返しますが、私が尋ねていると思う質問は、さまざまなパラメーターベクトルが何をするかですが、間違った質問をしている可能性があります。
次の投稿は非常に似ていますが、CIPerspectiveTransformにCIVectorsを使用する方法ではなく、なぜ彼の画像が消えるのかを尋ねています。また、一般的すぎるためか、ほとんど牽引されていません 。CIPerspectiveTransformフィルターの使用方法