2

大きいサイズの画像(2048 * 2048px)がありますが、この画像はiPhone画面に320*320と表示されます。私はこれをしたい:

私のAPPでは、ユーザーは大きなサイズの画像(2048 * 2048など)を開くことができ、画像はiPhone画面で320 * 320と表示され、画像の上に長方形があり、ユーザーはiPhone画面の画像内の任意の場所に長方形を移動できます。 rectangle(100、100、300、200)の場合、元のサイズの画像を長方形の領域内で縮尺どおりにクリップします。

私は多くの方法を試しました、

UIImageView *originalImageView = [[UIImage View alloc] initWithImage:originalImage]];

CGRect rect = CGRectMake(100, 100, 300, 200);

UIImage *cropImage = [UIImage imageWithCGImage:CGImageCreateWithImageInRect([originalImageView.image CGImage], rect)];

しかし、cropImageは300 * 200サイズの画像であり、適切に拡大縮小されていません。

4

3 に答える 3

1

まず、次の方法を使用して、画像のサイズを320*320に変更します。

+(UIImage *)resizeImage:(UIImage *)image width:(float)width height:(float)height
{
  CGSize newSize;
  newSize.width = width;
  newSize.height = height
  UIGraphicsBeginImageContext(newSize);
  [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
  UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
}

次に、サイズ変更された画像をimageViewに設定します

UIImage *resizeImage = [YourControllerName resizeImage:originalImage width:320 height:320];
UIImageView *originalImageView = [[UIImage View alloc] initWithImage:resizeImage]];

これでトリミングできます

CGRect rect = CGRectMake(100, 100, 300, 200);
UIImage *cropImage = [UIImage imageWithCGImage:CGImageCreateWithImageInRect([originalImageView.image CGImage], rect)];
于 2012-06-27T02:50:54.633 に答える
1

これを行うと、元の画質が維持されます。

CGSize bounds = CGSizeMake(320,320) // Considering image is shown in 320*320
CGRect rect = CGRectMake(100, 100, 220, 200); //rectangle area to be cropped

float widthFactor = rect.size.width * (originalImage.size.width/bounds.size.width);
float heightFactor = rect.size.height * (originalImage.size.height/bounds.size.height);
float factorX = rect.origin.x * (originalImage.size.width/bounds.size.width);
float factorY = rect.origin.y * (originalImage.size.height/bounds.size.height);

CGRect factoredRect = CGRectMake(factorX,factorY,widthFactor,heightFactor);
UIImage *cropImage = [UIImage imageWithCGImage:CGImageCreateWithImageInRect([originalImage CGImage], factoredRect)];

そして最も重要なのは、imagePickerControllerが返す画像をトリミングしたい場合、これは以下のような組み込み関数によって実行できます。

imagePickerController.allowsEditing = YES;
于 2012-06-27T02:51:20.047 に答える
0

スケールファクター(originalImageWidth / smallImageWidthなど)を計算してみませんか?長方形が(100,100,300,200)小さい画像にある場合は、lage画像をサイズでクリップする必要があります(100*factor,100*factor,300*factor,200*factor)

于 2012-06-27T01:59:32.133 に答える