4

ユーザーがカメラから画像をキャプチャするか、ライブラリから画像を選択できるようにしています。この画像はUIImageView. ユーザーは、が に設定されているUIImagePickerController場合とまったく同じように、バウンディング ボックス内で画像をスケーリングおよび配置できるようになりました。allowsEditingYES

ユーザーが結果に満足して [完了] をタップすると、トリミングされUIImageた . CGImageCreateWithImageInRectこれはスケーリングを考慮していないため、使用すると問題が発生します。変換は、次のように imageView に適用されます。

CGAffineTransform transform = CGAffineTransformScale(self.imageView.transform, newScale, newScale);
[self.imageView setTransform:transform];

ジェスチャレコグナイザの使用。

何が起こっているのかと思います。UIImageView がスケーリングされて移動され、UIViewContentModeScaleAspectFit が保持されている UIImage に適用され、画像をトリミングするように要求すると、正確にそれが行われます - スケーリングの位置に関係なく。私がこれを考える理由は、画像を拡大縮小したり移動したりせずに [完了] をタップするだけで、すぐにトリミングが機能するからです。

次のように画像をトリミングします。

- (UIImage *)cropImage:(UIImage*) img toRect:(CGRect)rect {

    CGFloat scale = [[UIScreen mainScreen] scale];

    if (scale>1.0) {        
        rect = CGRectMake(rect.origin.x*scale , rect.origin.y*scale, rect.size.width*scale, rect.size.height*scale);        
    }

    CGImageRef imageRef = CGImageCreateWithImageInRect([img CGImage], rect);
    UIImage *result = [UIImage imageWithCGImage:imageRef scale:self.imageView.image.scale orientation:self.imageView.image.imageOrientation];
    //    UIImage *result = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef);
    return result;
}

メインビューのサブビューであるビューからcropRectを渡します(UIImagePickerControllerのような正方形のオーバーレイボックス)。メイン UIView には、スケーリングされる UIImageView と、切り抜き四角形を表示する UIView があります。

「見たとおりの結果が得られる」クロッピングを行うにはどうすればよいですか。また、どの要素を考慮に入れる必要がありますか。または、階層またはスケーリングを別の方法で実装する必要があるかどうかの提案かもしれません。

4

1 に答える 1

0

簡単なトリックを試してみてください。Apple のサイトには、コードを使用して写真を拡大する方法を示すサンプルがあります。ズームが完了したら、グラフィック コンテキストを使用して境界ビューのフレーム サイズを取得し、それを使用して画像を取得します。たとえば、Uiview にはズームされた画像を持つスクロール ビューが含まれます。したがって、スクロールビューがズームし、イメージもズームします。境界 UIview のフレーム サイズを取得し、そこからイメージ コンテキストを作成して、それを新しいイメージとして保存します。それが理にかなっているかどうか教えてください。

乾杯 :)

于 2012-07-03T11:34:05.557 に答える