如何用颜色填充imageview(图像未覆盖)中的空白?

时间:2011-09-20 09:23:35

标签: objective-c ios uiimageview uiimage

我想创建一个固定大小的图像,例如612乘612.我正在使用图像选择器从我的iphone中选择照片。因此,为了确保所有照片都适合612 x 612大小而不失真,我使用以下方法重新缩放照片,使其符合612到612的大小。但是因此,空白区域可能会在最终图像中创建。 (见下面的例子)

我使用以下代码来缩放我的图像(固定尺寸612乘612)

//Scale the image to fit to imageview
UIImage *image = [self scaleImage:img toRectSize:CGRectMake(0, 0, 612, 612)];


//Method to scale image
- (UIImage *)scaleImage:(UIImage *)img toRectSize:(CGRect)screenRect
{
    UIGraphicsBeginImageContext(screenRect.size);
    float hfactor = img.size.width / screenRect.size.width;
    float vfactor = img.size.height / screenRect.size.height;

    float factor = MAX(hfactor, vfactor);

    float newWidth = img.size.width / factor;
    float newHeight = img.size.height / factor;

    float leftOffset = (screenRect.size.width - newWidth) / 2;
    float topOffset = (screenRect.size.height - newHeight) / 2;

    CGRect newRect = CGRectMake(leftOffset, topOffset, newWidth, newHeight);
    [img drawInRect:newRect blendMode:kCGBlendModePlusDarker alpha:1];

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

    return newImage;   
}

如上所述,由于图像有时不是一个完整的正方形,我得到的结果如下所示:

enter image description here

如何用黑色感觉图像中的空白区域?

2 个答案:

答案 0 :(得分:2)

一种方法是将 UIImageView backgroundColor设置为blackColor

另一种方法是在缩放图像时用 blackColor 填充矩形。

- (UIImage *)scaleImage:(UIImage *)img toRectSize:(CGRect)screenRect {

    ...
    CGRect newRect = CGRectMake(leftOffset, topOffset, newWidth, newHeight);

    // Fill the original rect with black color
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [[UIColor blackColor] CGColor]);
    CGContextFillRect(context, screenRect);

    [img drawInRect:newRect blendMode:kCGBlendModeNormal alpha:1];
    ...
}

请注意, drawInRect:blendMode:alpha:方法中的blendMode设置为kCGBlendModeNormal。如果您设置其他一些混合模式,您将得到不希望的结果。例如,如果将混合模式设置为 kCGBlendModePlusDarker 并使用 blackColor 填充矩形,则整个图像将变为黑色。

答案 1 :(得分:1)

UIImageView上的背景颜色设置为黑色,您将得到您想要的颜色