2

UIImageの表示部分をから取得しようとしていUIImageViewます。UIImageView画面全体を取ります。ピンチ&パンジェスチャがに追加されましたUIImageView。したがって、ユーザーはイメージビューをパン/ズームできます。パン/ズーム後、画像ビューの表示部分のみをトリミングしたいと思います。私はいくつかの方法を試しました。しかし、それは私に画像の間違った部分を返します。

前もって感謝します。

4

2 に答える 2

10

QuartzCoreフレームワークをプロジェクトに組み込み、画像ビューから画像の表示部分を取得するためのこのメソッドを実装します:(注:プロジェクトでARCを使用していることを意味します)

#import <QuartzCore/QuartzCore.h>

- (UIImage*)imageFromImageView:(UIImageView*)imageView
{
    UIGraphicsBeginImageContext(imageView.frame.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextRotateCTM(context, 2*M_PI);

    [imageView.layer renderInContext:context];
    UIImage *image =  UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}
于 2012-06-20T14:42:18.970 に答える
1

皆さん、ありがとうございました。私は解決策を見つけました。これは、画像の表示部分を取得するために使用したコードです。(画面全体を撮影しているため、ズームまたはパンしたときに画像が完全に表示されないことに注意してください)

  - (UIImage *)cropVisiblePortionOfImageView:(UIImageView *)imageView {

  CGFloat zoomScaleX=imageView.frame.size.width/initialWidth;
  CGFloat zoomScaleY=imageView.frame.size.height/initialHeight;
  CGSize zoomedSize=CGSizeMake(initialWidth*zoomScaleX,initialHeight*zoomScaleY);

  UIGraphicsBeginImageContext(zoomedSize);
  [imageView.image drawInRect:CGRectMake(0, 0, zoomedSize.width, zoomedSize.height)];
  UIImage *zoomedImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();

  UIGraphicsBeginImageContext(CGSizeMake(initialWidth, initialHeight));
  [zoomedImage drawAtPoint:CGPointMake(imageView.frame.origin.x, imageView.frame.origin.y)];
  UIImage *cropedImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();

  return cropedImage;
}
于 2012-06-21T11:18:44.087 に答える