2012-06-27 64 views
1

我有一个大尺寸的图像(2048 * 2048px),此图像在iPhone屏幕上显示为320 * 320。我想这样做:如何在iPhone中缩放图像?

在我的应用程序,用户可以打开大尺寸图像(例如,2048 * 2048),图像显示为320 * 320的iPhone屏幕上,并有矩形在图像上,用户可以移动iPhone屏幕上图像内任意位置的矩形,例如矩形(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大小的图像,无法正常规模。

回答

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; 
0

为什么不计算比例因子(例如originalImageWidth/smallImageWidth)? 如果您的小图像中的矩形为(100,100,300,200),则应该在尺寸为(100*factor,100*factor,300*factor,200*factor)的位置剪下您的图像。

0

首先调整图像使用这种方法的尺寸为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)];