2011-07-04 118 views
1

我在我的應用程序中使用UIImagePickerController拍照,我使用我自己的控件,這意味着UIImagePickerController showsCameraControls屬性設置爲NO,並且在拍攝圖片的overlayView中有一個UIButton。現在,我注意到我保存在照片庫中的圖像實際上顯示的區域比預覽視圖中顯示的區域大。其他人有同樣的問題嗎?任何解決方案,讓圖片顯示預覽中的內容?UIImagePickerController圖像大小

回答

1

通過預覽我想,你是在談論影像選擇器接口(而不是默認的預覽駁回圖像拾取界面後出現屏幕)。

您應用於圖像選擇器界面(使用cameraViewTransform)的變換無法反映所拍攝的圖像。例如,如果您試圖縮放(進出)應用比例,則需要對獲取的圖像應用相同的(變換),以使圖像拾取器界面中的圖像和實際保存的圖像保持同步。
此外,在應用轉換時,您還必須考慮圖像方向。

2

從選擇器獲取圖像對象後,調整圖像,然後裁剪

我需要同樣的事情 - 在我的情況,挑選適合一旦縮放尺寸,然後裁剪每端,以適應其餘的寬度。 (我在橫向工作,所以可能沒有注意到縱向模式中的任何缺陷。)這裏是我的代碼 - 它是UIImage上的一個關於categeory的部分。我的代碼中的目標大小始終設置爲設備的全屏大小。

@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