在UIImageView中调整UIImage的大小

时间:2011-06-17 05:16:25

标签: iphone xcode uiimageview

我正在尝试创建一个带有一些图像的UIPickerView,但我似乎无法弄清楚如何使图像适合视图(现在它们太大而且彼此重叠)

我正在尝试使用函数在绘制时调整每个图像的大小,但是在调用函数时我遇到错误,尽管程序编译并运行正常(图像没有调整大小除外)。调整大小功能和初始化函数是:

-(UIImage *)resizeImage:(UIImage *)image width:(int)width height:(int)height {
    NSLog(@"resizing");
    CGImageRef imageRef = [image CGImage];
    CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);

    //if (alphaInfo == kCGImageAlphaNone)
    alphaInfo = kCGImageAlphaNoneSkipLast;

    CGContextRef bitmap = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(imageRef), 
                                                4 * width, CGImageGetColorSpace(imageRef), alphaInfo);
    CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef);
    CGImageRef ref = CGBitmapContextCreateImage(bitmap);
    UIImage *result = [UIImage imageWithCGImage:ref];

    CGContextRelease(bitmap);
    CGImageRelease(ref);

    return result;  
}

- (void)viewDidLoad {
    UIImage *h1 = [UIImage imageNamed:@"h1.png"];

    h1 = [self resizeImage:h1 width:50 height: 50];

    UIImageView *h1View = [[UIImageView alloc] initWithImage:h1];

    NSArray *imageViewArray = [[NSArray alloc] initWithObjects:
                                h1View, nil];

    NSString *fieldName = [[NSString alloc] initWithFormat:@"column1"];
    [self setValue:imageViewArray forKey:fieldName];
    [fieldName release];
    [imageViewArray release];

    [h1View release];
}

控制台输出:

  

TabTemplate [29322:207]调整大小

     

TabTemplate [29322]:CGBitmapContextCreate:不支持的色彩空间

     

TabTemplate [29322]:CGContextDrawImage:无效的上下文

     

TabTemplate [29322]:CGBitmapContextCreateImage:无效的上下文

我无法弄清楚出了什么问题。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:16)

如果您使用UIImage的{​​{1}}属性,则无需调整contentMode的大小。

UIImageView

或者如果您仍想调整UIImage的大小,请查看以下SO帖子。

resizing a UIImage without loading it entirely into memory?

UIImage: Resize, then Crop

答案 1 :(得分:15)

使用下面的内容使用宽高比缩放图像,然后将图像剪切为imageview的边界。

imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.clipsToBounds = YES; 

答案 2 :(得分:0)

如果是swift

imageView.contentMode = .ScaleAspectFill
imageView.clipsToBounds = true

答案 3 :(得分:-1)

UIImage *image = [UIImage imageNamed:@"myImage"];
    [image drawInRect: destinationRect];
    UIImage *thumbnail = UIGraphicsGetImageFromCurrentImageContext();
UIImageWriteToSavedPhotosAlbum(image,nil,nil,nil);