2011-06-17 21 views
7

Estoy tratando de crear un UIPickerView con algunas imágenes, pero parece que no puedo encontrar la forma de hacer que las imágenes encajen en la vista (ahora son demasiado grandes y superposición entre sí).Redimensionar UIImage en UIImageView

Estoy tratando de usar una función para cambiar el tamaño de cada imagen cuando se dibuja, pero recibo errores cuando se llama a la función, aunque el programa se compila y funciona bien (con la excepción de que la imagen no cambia de tamaño). Las funciones de función y de inicialización de cambio de tamaño son:

-(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]; 
} 

Salida de consola:

TabTemplate [29322: 207] cambio de tamaño

TabTemplate [29322]: CGBitmapContextCreate: espacio de color no soportado

TabTemplate [ 29322]: CGContextDrawImage: contexto no válido

TabTempla te [29322]: CGBitmapContextCreateImage: contexto no válido

No puedo entender qué está pasando mal. Cualquier ayuda es muy apreciada.

+0

¿verificó si el valor devuelto por CGImageGetColorSpace (imageRef) es uno de los valores aceptados por CGBitmapContextCreate? – Bemmu

Respuesta

15

Uso de abajo para escalar la imagen usando la relación de aspecto, luego cortar la imagen para límites de ImageView.

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

Gracias por esta respuesta. 'clipsToBounds' era lo que me faltaba, ¡gran ayuda! – Sam

+0

@Sam - de nada :) – trillions

+0

Esto rellenará correctamente la vista con la imagen manteniendo su relación de aspecto, pero oculta lo que no cabe en el área. –

0

En caso de rápida

imageView.contentMode = .ScaleAspectFill 
imageView.clipsToBounds = true 
-1
UIImage *image = [UIImage imageNamed:@"myImage"]; 
    [image drawInRect: destinationRect]; 
    UIImage *thumbnail = UIGraphicsGetImageFromCurrentImageContext(); 
UIImageWriteToSavedPhotosAlbum(image,nil,nil,nil); 
Cuestiones relacionadas