2

ジェスチャーを使用して画像を回転、サイズ変更、翻訳できるアプリケーションを作成しました。次に、から画像を取得する必要がありUIImageViewます。私はコードのこの部分をStack-overflowのどこかで見つけました。スマイラーの質問はここで答えられますが、角度の入力が必要です。同じ人が、私が使用しているより良い解決策をどこか別の場所に書きました。しかし、問題があります。多くの場合、空白の画像が返されます。または切り捨てられた画像(多くの場合、上面から)。そのため、コードに問題があり、いくつかの変更が必要です。私の問題は、私はCore-graphicsに不慣れで、この問題にひどく立ち往生しているということです。

UIGraphicsBeginImageContext(imgView.image.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform transform = imgView.transform;
transform = CGAffineTransformScale(transform, 1.0, -1.0);
CGContextConcatCTM(context, transform);
CGContextDrawImage(context, CGRectMake(0, 0, imgView.image.size.width, imgView.image.size.height), imgView.image.CGImage);
UIImage *newRotatedImage = [UIImage imageWithCGImage: CGBitmapContextCreateImage(context)];
UIGraphicsEndImageContext();

編集1.1 サンプルコードをありがとう、しかし再びそれは問題を抱えています。さらに詳しく説明します。私は、imageviewを使用して画像を拡大縮小、変換、およびサイズ変更するためにジェスチャーを使用しています。したがって、このすべてのデータは、imageviewのtransformプロパティに保存されます。私はcore-imageで別の方法が好きです。そこで、コードを次のように変更しました。

CGRect bounds =  CGRectMake(0, 0, imgTop.size.width, imgTop.size.height);
CIImage *ciImage = [[CIImage alloc] initWithCGImage:imageView.image.CGImage options:nil];
CGAffineTransform transform = imgView.transform;
ciImage = [ciImage imageByApplyingTransform:transform];
return [UIImage imageWithCIImage:ciImage] ;

今、私は圧迫されて間違ったサイズの鏡像を取得しています。またご迷惑をおかけして申し訳ありません。coreimageでimageviewの変換を使用して適切な画像を取得する方法を教えていただけますか?

4

4 に答える 4

3
CIImage *ciImage = [[CIImage alloc] initWithCGImage:fximage.CGImage options:nil];
CGAffineTransform transform = fxobj.transform;
float angle = atan2(transform.b, transform.a);
transform = CGAffineTransformRotate(transform, - 2 * angle);
ciImage = [ciImage imageByApplyingTransform:transform];
UIImage *screenfxImage = [UIImage imageWithCIImage:ciImage];

コードを追加することを忘れないでください:transform = CGAffineTransformRotate(transform, - 2 * angle);回転方向が反対であるため

于 2012-06-14T04:48:38.260 に答える
1

この種のもののためだけに目的の C クラスを作成しました。GitHub ANImageBitmapRepで確認できます。回転を行う方法は次のとおりです。

ANImageBitmapRep * ibr = [myImage image];
[ibr rotate:anAngle];
UIImage * rotated = [ibr image];

ここで、anAngleはラジアンであることに注意してください。

于 2012-04-06T20:49:38.697 に答える
1

ドキュメントへのリンクは次のとおりです 。- http://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html

画像を回転させるサンプルコード:-

        CIImage *inputImage = [[CIImage alloc] initWithImage:currentImage];
        CIFilter * controlsFilter = [CIFilter filterWithName:@"CIAffineTransform"];
        [controlsFilter setValue:inputImage forKey:kCIInputImageKey];
        [controlsFilter setValue:[NSNumber numberWithFloat:slider.value] forKey:@"inputAngle"];
        CIImage *displayImage = controlsFilter.outputImage;
        UIImage *finalImage = [UIImage imageWithCIImage:displayImage];

        CIContext *context = [CIContext contextWithOptions:nil];
        if (displayImage == nil || finalImage == nil) {
            // We did not get output image. Let's display the original image itself.
            photoEditView.image = currentImage;
        }
         else {

            CGImageRef imageRef = [context createCGImage:displayImage fromRect:displayImage.extent];
            photoEditView.image = [UIImage imageWithCGImage:imageRef];
            CGImageRelease(imageRef);
        }
        context = nil;
        [inputImage release];
于 2012-04-07T05:17:48.287 に答える