Cambiar el tamaño de UIImage con relación de aspecto?

Estoy usando este código para cambiar el tamaño de una imagen en el iPhone:

CGRect screenRect = CGRectMake(0, 0, 320.0, 480.0); UIGraphicsBeginImageContext(screenRect.size); [value drawInRect:screenRect blendMode:kCGBlendModePlusDarker alpha:1]; UIImage *tmpValue = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

Lo cual funciona muy bien, siempre que la relación de aspecto de la imagen coincida con la de la nueva imagen de tamaño. Me gustaría modificar esto para que mantenga la relación de aspecto correcta y simplemente ponga un fondo negro en cualquier lugar donde la imagen no se muestre. Así que todavía terminaría con una imagen de 320×480 pero con negro en la parte superior e inferior o en los laterales, dependiendo del tamaño de la imagen original.

¿Hay una manera fácil de hacer esto similar a lo que estoy haciendo? ¡Gracias!

Después de configurar su pantalla, haga algo como lo siguiente para decidir en qué rect para dibujar la imagen:

 float hfactor = value.bounds.size.width / screenRect.size.width; float vfactor = value.bounds.size.height / screenRect.size.height; float factor = fmax(hfactor, vfactor); // Divide the size by the greater of the vertical or horizontal shrinkage factor float newWidth = value.bounds.size.width / factor; float newHeight = value.bounds.size.height / factor; // Then figure out if you need to offset it to center vertically or horizontally float leftOffset = (screenRect.size.width - newWidth) / 2; float topOffset = (screenRect.size.height - newHeight) / 2; CGRect newRect = CGRectMake(leftOffset, topOffset, newWidth, newHeight); 

Si no desea agrandar imágenes más pequeñas que la pantalla Rect, asegúrese de que el factor sea ​​mayor o igual a uno (por ejemplo, factor = fmax(factor, 1) ).

Para obtener el fondo negro, probablemente solo desee establecer el color del contexto en negro y llamar a fillRect antes de dibujar la imagen.