2011-07-04 18 views
1

私は写真を撮るために私のアプリでUIImagePickerControllerを使用しています。私はUIImagePickerController showsCameraControlsプロパティがNOに設定されていることを意味し、画像を撮影するoverlayViewの中にUIButtonを持っています。さて、私は、フォトライブラリに保存した画像が実際にプレビュービューに表示されているものよりも大きな領域を表示していることに気付きました。他の誰かが同じ問題を抱えていますか?どのようなソリューションは、プレビューにあったものだけを示す画像を取得する?UIImagePickerController画像のサイズ

答えて

1

私はあなたがイメージピッカーインターフェース(とない画像ピッカーインターフェイスを却下した後に表示されるデフォルトのプレビュー画面)について話している、と仮定します。

(カメラビュートランスフォームを使用して)画像ピッカーインターフェイスに適用する変換は、撮影した画像に反映されません。たとえば、縮尺をズームイン(ズームアウト)しようとしている場合、イメージをピッカーインターフェイスと実際に保存されたイメージを同期させて保持するために、取得したイメージに同じ(トランスフォーム)を適用する必要があります。
また、変換を適用する際にイメージの向きを考慮する必要があります。

2

ピッカーから画像オブジェクトを取得した後に画像のサイズを変更し、その後、私は同じことを必要と

をトリミング - 一度スケールフィットの寸法を選択し、私の場合には、その後に残りの部分を合わせてそれぞれの端をトリミング幅。 (私はランドスケープで作業しているので、ポートレートモードの不具合に気づいていないかもしれません)。これは私のコードです。これはUIImageの門番の一部です。私のコードのターゲットサイズは、常にデバイスのフルスクリーンサイズに設定されています。プレビューすることにより

@implementation UIImage (Extras) 

#pragma mark - 
#pragma mark Scale and crop image 

- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize 
{ 
UIImage *sourceImage = self; 
UIImage *newImage = nil;  
CGSize imageSize = sourceImage.size; 
CGFloat width = imageSize.width; 
CGFloat height = imageSize.height; 
CGFloat targetWidth = targetSize.width; 
CGFloat targetHeight = targetSize.height; 
CGFloat scaleFactor = 0.0; 
CGFloat scaledWidth = targetWidth; 
CGFloat scaledHeight = targetHeight; 
CGPoint thumbnailPoint = CGPointMake(0.0,0.0); 

if (CGSizeEqualToSize(imageSize, targetSize) == NO) 
    { 
    CGFloat widthFactor = targetWidth/width; 
    CGFloat heightFactor = targetHeight/height; 

    if (widthFactor > heightFactor) 
     scaleFactor = widthFactor; // scale to fit height 
    else 
     scaleFactor = heightFactor; // scale to fit width 
    scaledWidth = width * scaleFactor; 
    scaledHeight = height * scaleFactor; 

    // center the image 
    if (widthFactor > heightFactor) 
     { 
     thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
     } 
    else 
     if (widthFactor < heightFactor) 
      { 
      thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5; 
      } 
    } 

UIGraphicsBeginImageContext(targetSize); // this will crop 

CGRect thumbnailRect = CGRectZero; 
thumbnailRect.origin = thumbnailPoint; 
thumbnailRect.size.width = scaledWidth; 
thumbnailRect.size.height = scaledHeight; 

[sourceImage drawInRect:thumbnailRect]; 

newImage = UIGraphicsGetImageFromCurrentImageContext(); 
if(newImage == nil) 
    NSLog(@"could not scale image"); 

//pop the context to get back to the default 
UIGraphicsEndImageContext(); 
return newImage; 
} 
+0

ありがとうございます。それは本当に私が必要なものではありません。私は、cameraViewTransformにスケール変換を適用すると、実際にライブラリに保存するよりも小さな領域を見ることができることに気付きました。 – singingAtom

関連する問題