UIImage: fill background

Я сделал это ниже функцией fitImage , которая принимает UIImage и CGSize . В случае, если входное изображение больше, чем поле ввода, изображение будет уменьшено, чтобы заполнить поле. Если прямоугольник и изображение имеют разные пропорции, изображение не заполняет прямоугольник полностью, и будет некоторый видимый фон. В этом случае этот фон всегда белый. Как я могу изменить это, например, на черный фон?

+ (UIImage*) fitImage:(UIImage*)image inBox:(CGSize)size {

    if (image.size.width==size.width && image.size.height==size.height)
        return image;

    if (image.size.width<size.width && image.size.height<size.height)
        return [Util scaleImage:image toSize:size];

    float widthFactor = size.width / image.size.width;
    float heightFactor = size.height / image.size.height;

    CGSize scaledSize = size;
    if (widthFactor<heightFactor) {
        scaledSize.width = size.width;
        scaledSize.height = image.size.height * widthFactor;
    } else {
        scaledSize.width = image.size.width * heightFactor;
        scaledSize.height = size.height;
    }

    UIGraphicsBeginImageContextWithOptions( size, NO, 0.0 );

    float marginX = (size.width-scaledSize.width)/2;
    float marginY = (size.height-scaledSize.height)/2;
    CGRect scaledImageRect = CGRectMake(marginX, marginY, scaledSize.width, scaledSize.height );

    [image drawInRect:scaledImageRect];

    UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();    

    return scaledImage;
}

Скажите, пожалуйста, если вам нужна дополнительная информация.

Решение:

+ (UIImage*) fitImage:(UIImage*)image inBox:(CGSize)size withBackground:(UIColor*)color {

    if (image.size.width==size.width && image.size.height==size.height)
        return image;

    if (image.size.width<size.width && image.size.height<size.height)
        return [Util scaleImage:image toSize:size];

    float widthFactor = size.width / image.size.width;
    float heightFactor = size.height / image.size.height;

    CGSize scaledSize = size;
    if (widthFactor<heightFactor) {
        scaledSize.width = size.width;
        scaledSize.height = image.size.height * widthFactor;
    } else {
        scaledSize.width = image.size.width * heightFactor;
        scaledSize.height = size.height;
    }

    UIGraphicsBeginImageContextWithOptions( size, NO, 0.0 );

    float marginX = (size.width-scaledSize.width)/2;
    float marginY = (size.height-scaledSize.height)/2;
    CGRect scaledImageRect = CGRectMake(marginX, marginY, scaledSize.width, scaledSize.height );

    UIImage* temp = UIGraphicsGetImageFromCurrentImageContext();
    [color set];
    UIRectFill(CGRectMake(0.0, 0.0, temp.size.width, temp.size.height));
    [image drawInRect:scaledImageRect];

    UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();    

    return scaledImage;
}
6
задан dhrm 3 December 2011 в 10:40
поделиться